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

ソケットが接続されている場合、そのソケットのローカル名がgetsockname()a に入力されます。struct sockaddrこれは、両方の OS (および BSD ソケットを備えたもの) で機能します。

于 2011-02-25T07:38:10.723 に答える
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 に答える