我以前见过这个问题,但我从未找到有效的答案。我需要获取我的服务器连接的计算机的显式IP地址(即123.456.789.100)和端口号,以便将该信息转发给其他客户端。我在Windows 7(Home Premium),Visual Studio 2010 Professional上使用WinSock2.h - 制作“C++控制台应用程序”。这是一个TCP连接。 这里是我到目前为止的代码:如何从Windows套接字(C++)获取连接主机的IP地址?
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的端口每次。我已经尝试过替代方案,包括gethostbyname,它可以工作,但我需要实际的IP本身。我也尝试getpeername()代替getsockname(),但结果是相同的。我在路由器后面,但到目前为止,我在同一台计算机上同时使用了服务器和客户端。
在此先感谢您的帮助!
是的,你是对的,它是抛出一个错误,我没有检查它。非常感谢您的解决方案。 – Sefu