我以前见过这个问题,但我从来没有找到有效的答案。我需要获取我的服务器所连接的计算机的显式 IP 地址(即 123.456.789.100)和端口号,以便将该信息转发给其他客户端。我在 Windows 7(家庭高级版)、Visual Studio 2010 Professional 上使用 WinSock2.h - 制作“C++ 控制台应用程序”。这是一个 TCP 连接。到目前为止,这是我的代码:
sockaddr_in* addr = new sockaddr_in;
int addrsize = sizeof(addr);
getsockname(clientSock, (sockaddr*)addr, &addrsize);
char* ip = inet_ntoa(addr->sin_addr);
int port = addr->sin_port;
printf("IP: %s ... PORT:%d\n", ip, port);
这总是给我 205.205.205.205 的 IP 和 52685 的 PORT 每次。我尝试了替代方案,包括 gethostbyname,它可以工作,但我需要实际的 IP 本身。我也试过用getpeername() 代替getsockname(),但结果是一样的。我在路由器后面,但到目前为止我在同一台机器上同时使用服务器和客户端。
提前感谢您的任何帮助!