VC ¿Por qué siempre obtengo la dirección IP del cliente: 204.204.204.204?
Diseño simple de la aplicación Winsock
struct sockaddr_in sa;
int salen = sizeof(sa);
getsockname( sd, (struct). sockaddr FAR *)&sa, &salen )
¿Cómo saber quién es la otra parte conectada a nuestro Socket?
El Socket conectado tiene dos extremos, por lo que en relación con la función getsockname() Winsock también proporciona
una función getpeername() para permitirnos obtener la dirección IP y
puerto del número
al que estamos conectados.
◎ getpeername(): obtiene la dirección IP del par y el número de puerto del Socket conectado correctamente.
Formato: int PASCAL FAR getpeername( SOCKET s,
struct sockaddr FAR *name, int FAR *namelen
Parámetro: s Código de identificación del socket <); /p>
nombre es el área de almacenamiento temporal que almacena la dirección IP de la otra parte conectada a este Socket
La longitud del nombre namelen
Valor de retorno: Éxito - 0
Error - SOCKET_ERROR (llame a WSAGetLastError() para conocer el motivo)
Descripción: esta función se puede utilizar para obtener los datos de dirección del otro extremo del Socket conectado exitosamente.
El método de llamada es el siguiente:
struct sockaddr_in sa;
int salen = sizeof(sa);
getpeername( sd). , ( struct sockaddr FAR *)&sa, &salen )
Ahora todavía usamos WinKing como nuestra pila Winsock y usamos las herramientas que proporciona para observar si los enlaces y datos de Sockets son correctos.
En la Figura 1, podemos ver en la ventana de WinKing que hemos configurado el nombre de este host en
"vincent" y la dirección IP en "140.92.61.24". También utilizamos dos programas de saludo, uno como Cliente (el que se abre en el lado derecho de la pantalla) y otro como Servidor (el que está minimizado en el lado izquierdo de la pantalla). El número de puerto utilizado por el Servidor
es "7016"; el Cliente no llama a bind() para especificar el número de puerto
, pero llama a conectarse. () especificado por el sistema.
Llamamos a gethostname() y la respuesta que obtenemos es "vincent" y el Cliente llama a
getsockname() y obtiene su dirección IP como "140.92.61.24" y el puerto. el número es 「
2110」
(El autor ha mencionado antes que el número de puerto asignado automáticamente por el sistema estará entre 1024 y 5000)
; /p >
Llame a getpeername() nuevamente para obtener la dirección IP del servidor conectado al cliente, que es "140.92
.61.24"
(Porque nuestro cliente y ambos servidores están en el mismo ordenador), el número de puerto es "7016"
. Efectivamente
¡Así es! (Los datos de Socket
ts interconectados
también se pueden observar a través de la ventana Estado de Sockets de WinKing, que es el mismo que el resultado que obtenemos al llamar a la función)