Я видел этот вопрос раньше, но я так и не нашел ответа, который работал бы. Мне нужно получить явный IP-адрес (например, 123.456.789.100) и номер ПОРТА компьютера, к которому подключен мой сервер, чтобы пересылать эту информацию другим клиентам. Я использую WinSock2.h в Windows 7 (Home Premium), Visual Studio 2010 Professional - создание «консольного приложения 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 (), но результаты были идентичными. Я нахожусь за маршрутизатором, но пока использую и сервер, и клиент на одном компьютере.
Заранее благодарим за любую помощь!