首先參閱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;
}