我在 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");
最佳答案
您在提供给accept
的sockaddr
中获取客户端地址。如果您稍后想要连接的客户端套接字地址,您应该使用 getpeername
(不是 getsockname
)。
您还应该将一个有效且已初始化的变量作为长度传递给 getpeername
(或 getsockname
):
int size = sizeof(SOCKADDR_IN);
getpeername(connectedsocket, (SOCKADDR*) &address, &size);
您现在正在做的是尝试获取服务器套接字的本地地址,但调用错误。
关于c++ - 收不到客户端ip地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15335214/