Red de conocimiento informático - Problemas con los teléfonos móviles - VC ¿Por qué siempre obtengo la dirección IP del cliente: 204.204.204.204?

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)