mfc获取机器名&本机IP

在介绍如何获取机器名&本机IP之前,先了解一下几个概念

1、hostent 域名结构体

struct  hostent {
        char    FAR * h_name;           /* official name of host */
        char    FAR * FAR * h_aliases;  /* alias list */
        short   h_addrtype;             /* host address type */
        short   h_length;               /* length of address */
        char    FAR * FAR * h_addr_list; /* list of addresses */
#define h_addr  h_addr_list[0]          /* address, for backward compat */
};

2、gethostname()函数:返回本地主机的标准主机名。

gethostname(
    __out_bcount(namelen) char FAR * name,
    IN int namelen
    );

该函数把本地主机名存放入由name参数指定的缓冲区中。返回的主机名是一个以NULL结束的字符串。主机名的形式取决于Windows Sockets实现-它可能是一个简单的主机名,或者是一个域名。然而,返回的名字必定可以在gethostbyname()和WSAAsyncGetHostByName()中使用。

如果没有错误发生,gethostname()返回0。否则它返回SOCKET_ERROR。应用程序可以通过WSAGetLastError()来得到一个特定的错误代码。

3、gethostbyname()返回对应于给定主机名的包含主机名字和地址信息的hostent结构指针

gethostbyname(
    __in const char FAR * name
    );

如果没有错误发生,gethostbyname()返回如上所述的一个指向hostent结构的指针,否则,返回一个空指针。应用程序可以通过WSAGetLastError()来得到一个特定的错误代码。

4、inet_ntoa() :将网络地址转换成“.”点隔的字符串格式

inet_ntoa(
    IN struct in_addr in
    );

该函数将一个用in参数所表示的Internet地址结构转换成以“.” 间隔的诸如“a.b.c.d”的字符串形式。请注意inet_ntoa()返回的字符串存放在WINDOWS套接口实现所分配的内存中。应用程序不应假设该内存是如何分配的。在同一个线程的下一个WINDOWS套接口调用前,数据将保证是有效。
若无错误发生,inet_ntoa()返回一个字符指针。否则的话,返回NULL。其中的数据应在下一个WINDOWS套接口调用前复制出来。

 

 

5、重点来了,直接附上代码吧

 void getHostAddress {

         hostent *host;
         char hostName[128];
         gethostname(hostName,128);
         host=gethostbyname(hostName);
         CString strIPaddr;
         strIPaddr = inet_ntoa(*(struct in_addr*)host->h_addr_list[0]);

}

 

6、如果本地IP不唯一呢

void getHostAddress {

        char szHostName[128];
        if (gethostname(szHostName,128) == 0)
        {
                 struct hostent *pHost;
                 int i;
                 pHost=gethostbyname(szHostName);
                 for(i=0;pHost!=NULL&&pHost->h_addr_list[i]!=NULL;i++)
                 {
                         char str[100];
                         char addr[20];
                         int j;
                         LPSTR psz=inet_ntoa(*(struct in_addr *)pHost->h_addr_list[i]);
                 }
         }

}

 

你可能感兴趣的:(mfc,主机名,IP地址)