1. 程式人生 > >網路程式設計遇到的小函式之inet_ntop 01

網路程式設計遇到的小函式之inet_ntop 01

寫的一個小專案裡遇到的inet_ntop函式

通過一個域名獲得IP地址
查資料知道在網路地址資訊儲存在一個結構體叫做hostent
hostent成員
struct hostent
{
    char *h_name;  //主機名也就是所知的域名如www.baidu.com
    char **h_aliases;  //主機所有別名構成的字串陣列,同一IP可繫結多個域名
    int h_addrtype; //主要是IPV4
    int h_length;  //主機IP地址長度,IPV4地址為4,IPV6地址則為16
    char **h_addr_list;  // 主機的ip地址,以網路位元組序儲存,大端模式。要打印出這個IP,需要處理一下,inet_ntop函式就可以。
}
const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);
 這個函式作用轉換網路二進位制結構到ASCII型別的地址也就是:將ip網路地址轉換成常用的點分十進位制ip地址
af:對應hostent結構體變數h_addrtype src:對應需要轉換的二進位制IP dst:IP對應是十進位制結果 cnt:dst長度限制
Demo:
#include<stdio.h>
#include <arpa/inet.h>  
#include <netdb.h>  
int main()
{
    struct hostent *host;
    char str[32]={0};
    char **pptr;
    host = gethostbyname("www.baidu.com");

    printf("%s\n",inet_ntop(host->h_addrtype,host->h_addr,str,sizeof(str)));  
     //host->h_addr對應一個IP可能是h_addr_list[0]
  return 0;
}結果
[email protected]:~$ ./p
61.135.169.121
一開始沒有新增標頭檔案
#include<arpa/inet.h>

出現段錯誤現象,新增後就正常了。

估計是C語言裡有同名函式