c++ - 收不到客户端ip地址

标签 c++ client-server ip-address

我在 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"); 

最佳答案

您在提供给acceptsockaddr 中获取客户端地址。如果您稍后想要连接的客户端套接字地址,您应该使用 getpeername(不是 getsockname)。

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

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

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

关于c++ - 收不到客户端ip地址,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15335214/

相关文章:

azure - Azure 应用服务中的出站 IP 地址有何意义?

c++ - 如何启用共享对象在运行时访问数据文件 (UNIX)

c++ - 如何重载运算符+?

python - 使用 DataFrame 将 IP 地址转换为十进制时 split() 出错

c - 如何在c中的套接字编程中从服务器程序调用另一个服务器程序

java - 异步调用多个单独线程。但是一个线程陷入循环而另一个线程不执行

sockets - 将套接字绑定(bind)到本地主机以外的任何地址是什么意思?

C++ 用非静态函数重载静态函数

c++ - 在一个类中调用另一个类的getter

macos - postgresql 客户端溢出