0

我已经有了一个“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”“连接”的地址。

4

2 回答 2

1
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>

于 2011-02-25T06:32:55.710 回答
1

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

于 2011-02-25T07:38:10.723 回答