1,結構體 struct sockaddr,struct sockaddr_in,struct in_addr:
通用套接字資料結構:
struct sockaddr
實際使用的套接字資料結構,二者可以進行型別轉換:
struct sockaddr_in ;
struct in_addr ;
2,主機位元組序和網路位元組序轉換函式(一般用在整型時)
#include uint32_t htonl (uint32_t hostlong) //主機位元組序到網路位元組序的長整數轉換
uint16_t htons (uint16_t hostshort) //主機位元組序到網路位元組序的短整型轉換
uint32_t ntohl (uint32_t netlong) //網路位元組序到主機位元組序的長整形轉換
uint16_t ntohs(uint16_t netshort) //網路位元組序到主機位元組序的短整型轉換
3,主機位元組序ip 和網路位元組序ip的轉換
#include#include#include/*converts the
internet host address
cp from the ipv4 num‐bers-and-dots
notation into binary form (
in network byte order
) and stores it in the
structure that inp points to.*/
int inet_aton(const char *cp,struct in_addr *inp) ;
in_addr_t inet_addr(const char *cp); /* cp= "***.***.***.***" */
/*converts the internet host address in, given
in network byte order, to a string in ipv4 dotted-decimal notation.*/
char *inet_ntoa(struct in_addr in);
有兩個更新的函式inet_pton和inet_ntop,這2個函式能夠處理ipv4和ipv6,原型如下:
int
inet_pton
(int af, const char *src, void *dst)
這個函式轉換字串到網路位址,第乙個引數af是位址族,轉換後存在dst中
af_inet:src為指向字元型的位址,即ascii的位址的首位址(ddd.ddd.ddd.ddd格式的),函式將該位址轉換為in_addr的結構體,並複製在*dst中
如果函式出錯將返回乙個負值,並將errno設定為eafnosupport,如果引數af指定的位址族和src格式不對,函式將返回0。
函式inet_ntop進行相反的轉換原型如下:
const char *
inet_ntop
(int af, const void *src, char *dst, socklen_t cnt)
這個函式轉換網路二進位制結構到ascii型別的位址,引數的作用和上面相同,只是多了乙個引數。
4,gethostbyname函式
gethostbyname函式引入的原因是因為有時候我們輸入的並不一定是乙個位址的ip,可能是乙個位址的網域名稱或是主機名,比如:
www.google.com。這個時候就需要由主機名得出其ip, 然後得出網路位元組序ip 。
函式的原型為:
#include#includestruct hostent *gethostbyname(const char *name) ;
struct hostent
#define h_addr h_addr_list[0]
sample:
#include#include#include#include#includeint main(int argc, char *argv)
else
return 0;
}
gcc test.c -o test
./test www.google.com
74.125.71.105
1766292810
網路程式設計 套接字結構
每個協議族都定義了自己的套接字結構,這些結構均以sockaddr 開頭,並對應每個協議族自己的唯一字尾 當向任意乙個引數傳遞任何套接字函式時,套接字位址結構總是以引用形式傳遞 網路程式設計資料型別 posix規範 資料型別 說明標頭檔案 int8 t 帶符號8位整數 uint8 t 無符號8位整數 ...
LINUX網路程式設計之套接字
套接字可以讓linux在網路上通訊,用起來就像管道一樣,當然管道都是單向的,套接字既能寫也能收!以下是多客戶伺服器 include include include include include include include include define port 6000 define size...
Linux網路程式設計 原始套接字
原始套接字 sock raw 應用原始套接字,我們可以編寫出由tcp和udp套接字不能夠實現的功能.注意原始套接字只能夠由有 root許可權的人建立.dos.c include include include include include include include include inclu...