Windows下如何获取ip地址

发布于 2024-10-19 07:18:35 字数 375 浏览 0 评论 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”“连接”的IP地址。

all
i already had a "socketfd", and i was wondering how to use it to retrieve the local ip address.
under linux, i can do something like this(not exactly correct):

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);

but, on Windows, how can i achieve the same goal? (not using MFC)
many thanks.

edit: maybe my host has multiple ip addresses, and i want the one "connected" with "socketfd".

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

薄暮涼年 2024-10-26 07:18:35

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

If the socket is connected, then getsockname() on it will fill a struct sockaddr with the local name for the socket. This works on both OSes (and anything with BSD sockets).

青衫负雪 2024-10-26 07:18:35
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

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( );
      } 

with #include <winsock2.h>

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文