利用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; }
原创粉丝点击