Linux網路程式設計 套接字結構

2021-06-03 16:32:40 字數 2391 閱讀 9743

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...