gethostbyname用法实例c++

来源:互联网 发布:知乎北京哪家留学机构 编辑:程序博客网 时间:2024/05/19 02:18

经测试得出如下结论:

该函数获取的是有网络连接的网卡地址。如果笔记本电脑有无线网卡和一般网卡的话:

当两个网络连接都禁用时,只获取一个地址,且是127.0.0.1

当都启用且真的连接上网络时,获取两个网卡的地址。

当只用无线能上网,但网口不插网线时,只有无线网卡的地址。

当网口插上网线且禁用无线时,只有一般网卡的地址,不论是手动配置还是自动获取都可以正确获取该ip。

用法举例:

    const int arr_len =256;

    char name[arr_len];

    hostent *hst = NULL;

    in_addr inaddr;

    char *pp = NULL ;

    memset(name,0,arr_len);

    int rr =gethostname(name,arr_len);

    if (rr == 0)

    {

        hst =gethostbyname(name);

        if (hst != NULL)

        {

//本地连接1的地址

            memcpy((char*)(&inaddr),hst->h_addr_list[0],hst->h_length);

            pp   =  inet_ntoa(inaddr);

//无线网卡的地址

            memcpy((char*)(&inaddr),hst->h_addr_list[1],hst->h_length);

            pp   =  inet_ntoa(inaddr);

        }

    }


网摘:

gethostbyname方法是跟系统的某些东西挂钩的,两次调用gethostbyname这个方法会对同一个共享的资源做修改。这样会导致地址不一致的问题。故此,以后再调用gethostbyname这个方法后,要马上对其返回值进行使用(在下一次调用gethostbyname之前使用)。