我在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");
答案 0 :(得分:1)
您获得sockaddr
提供给accept
的客户地址。如果您以后想要连接的客户端套接字地址,则应使用getpeername
( not getsockname
)。
您还应该将有效且已初始化的变量作为getpeername
(或getsockname
)的长度传递:
int size = sizeof(SOCKADDR_IN);
getpeername(connectedsocket, (SOCKADDR*) &address, &size);
您现在正在尝试获取服务器套接字的本地地址,但是错误地调用它。