1. 程式人生 > >網路程式設計:inet_ntoa inet_aton inet_ntop和inet_pton分不清楚

網路程式設計:inet_ntoa inet_aton inet_ntop和inet_pton分不清楚

/******************************************************************************************************************

說明:inet_ntoa inet_aton inet_ntop和inet_pton分不清楚(掃盲)。

******************************************************************************************************************/ 

#include <sys/socket.h>

#include <netinet/in.h>

#include <arpa/inet.h>

int inet_aton(const char *cp, struct in_addr *inp);

inet_aton() 轉換網路主機地址cp(如192.168.1.10)為二進位制數值,並存儲在struct in_addr結構中,即第二個引數*inp,函式返回非0表示cp主機有地有效,返回0表示主機地址無效。

in_addr_t inet_addr(const char *cp);

inet_addr函式轉換網路主機地址(如192.168.1.10)為網路位元組序二進位制值,如果引數char *cp無效,函式返回-1(INADDR_NONE),這個函式在處理地址為255.255.255.255時也返回-1,255.255.255.255是一個有效的地址,不過inet_addr無法處理;

char *inet_ntoa(struct in_addr in);

inet_ntoa 函式轉換網路位元組排序的地址為標準的ASCII以點分開的地址,,該函式返回指向點分開的字串地址(如192.168.1.10)的指標,該字串的空間為靜態分配的,這意味著在第二次呼叫該函式時,上一次呼叫將會被重寫(覆蓋),所以如果需要儲存該串最後複製出來自己管理!

int inet_pton(int af, const char *src, void *dst);

這個函式轉換字串到網路地址,第一個引數af是地址族,轉換後存在dst中

inet_pton 是inet_addr的擴充套件,支援的多地址族有下列:

AF_INET:src為指向字元型的地址,即ASCII的地址的首地址(ddd.ddd.ddd.ddd格式的),函式將該地址轉換為in_addr的結構體,並複製在*dst中

AF_INET6:rc為指向IPV6的地址,,函式將該地址轉換為in6_addr的結構體,並複製在*dst中

如果函數出錯將返回一個負值,並將errno設定為EAFNOSUPPORT,如果引數af指定的地址族和src格式不對,函式將返回0。

const char *inet_ntop(int af, const void *src, char *dst, socklen_t cnt);

這個函式轉換網路二進位制結構到ASCII型別的地址,引數的作用和上面相同,只是多了一個引數socklen_t cnt,他是所指向快取區dst的大小,避免溢位,如果快取區太小無法儲存地址的值,則返回一個空指標,並將errno置為ENOSPC