利用hostent Structure打印ip地址
来源:互联网 发布:移动网络怎么转换器 编辑:程序博客网 时间:2024/06/04 19:55
首先参阅MSDN关于hostent结构的定义:
typedef 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 */}
其中成员
h_addr_list用来存放ip地址。
虽然h_addr_list是char **类型的,但是如果我们直接printf的话会打印出乱码(请高手解释下为什么)。
正确的做法是用(sockaddr_in*)类型强制转换一下,然后再用inet_ntoa函数将其转换为点分十进制串输出。
例如:假设hp的类型为hostent*,下面的代码打印了域名为hp->h_name的所有的ip地址
for (char **pc = h->h_addr_list;(*pc) != NULL;pc++) { addr.sin_addr = ((sockaddr_in*)*pc)->sin_addr; cout<<"ip address:"<<inet_ntoa(addr.sin_addr)<<endl; }