Как получить IP-адрес под Windows - PullRequest
0 голосов
/ 25 февраля 2011

все, что у меня уже было "socketfd", и мне было интересно, как использовать его для получения локального IP-адреса.в Linux я могу сделать что-то вроде этого (не совсем правильно):

struct ifreq ifr;
ifr.ifr_addr.sa_family = AF_INET;
ioctl(socketfd, SIOCGIFADDR, &ifr);
char *address = inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr);

, но в Windows как я могу достичь той же цели?(без использования MFC) большое спасибо.

edit: возможно, у моего хоста есть несколько IP-адресов, и я хочу, чтобы один "подключился" к "socketfd".

Ответы [ 2 ]

2 голосов
/ 25 февраля 2011
WORD wVersionRequested;
      WSADATA wsaData;
      char name[255];
      CString ip;
      PHOSTENT hostinfo;
      wVersionRequested = MAKEWORD( 2, 0 );

      if ( WSAStartup( wVersionRequested, &wsaData ) == 0 )
      {

            if( gethostname ( name, sizeof(name)) == 0)
            {
                  if((hostinfo = gethostbyname(name)) != NULL)
                  {
                        ip = inet_ntoa (*(struct in_addr *)*hostinfo->h_addr_list);
                  }
            }

            WSACleanup( );
      } 

с #include <winsock2.h>

1 голос
/ 25 февраля 2011

Если сокет подключен, то getsockname() на нем заполнит struct sockaddr локальным именем сокета. Это работает на обеих ОС (и на любом другом устройстве с BSD-сокетами).

...