我以前見過這個問題,但我從未找到有效的答案。我需要獲取我的服務器連接的計算機的顯式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