利用hostent Structure打印ip地址


首先參閱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;
	 }
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章