如何在Windows下获取IP地址

时间:2011-02-25 06:27:52

标签: c windows ip-address winsockets

所有 我已经有一个“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) 非常感谢。

编辑:也许我的主机有多个IP地址,我想要一个“连接”“socketfd”。

2 个答案:

答案 0 :(得分:2)

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 :(得分:1)

如果套接字已连接,则其上的getsockname()将使用套接字的本地名称填充struct sockaddr。这适用于两种操作系统(以及任何带有BSD套接字的操作系统)。