经测试得出如下结论:
该函数获取的是有网络连接的网卡地址。如果笔记本电脑有无线网卡和一般网卡的话:
当两个网络连接都禁用时,只获取一个地址,且是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之前使用)。