0

我在 C++ 控制台应用程序中有一个客户端服务器程序。我先运行服务器,然后运行客户端。服务器应显示来自已连接客户端的 IP 地址,但显示为 0.0.0.0

我猜是这条线导致了问题

getsockname(ListeningSocket, (SOCKADDR *)&ServerAddr, (int *)sizeof(ServerAddr));
printf("Server: Receiving IP(s) from client: %s\n", inet_ntoa(ServerAddr.sin_addr)); 

在客户端中,我将 IP 地址设置为 127.0.0.1

 ServerAddr.sin_addr.s_addr = inet_addr("127.0.0.1"); 
4

1 回答 1

1

sockaddr您会在提供的 to中获得客户地址accept。如果您以后想要一个连接的客户端套接字地址,您应该使用getpeername不是 getsockname)。

您还应该将有效且已初始化的变量作为长度传递给getpeername(或getsockname):

int size = sizeof(SOCKADDR_IN);
getpeername(connectedsocket, (SOCKADDR*) &address, &size);

您现在正在做的是尝试获取服务器套接字的本地地址,但错误地调用它。

于 2013-03-11T09:40:53.907 回答