sockaddr與sockaddr in的比較

2021-04-27 22:06:37 字數 973 閱讀 7606

struct sockaddr ;

sa_family是位址家族,一般都是「af_***」的形式。好像通常大多用的是都是af_inet。

sa_data是14位元組協議位址。

此資料結構用做bind、connect、recvfrom、sendto等函式的引數,指明位址資訊。

但一般程式設計中並不直接針對此資料結構操作,而是使用另乙個與sockaddr等價的資料結構

sockaddr_in(在netinet/in.h中定義):

struct  sockaddr_in ;

struct  in_addr ;

typedef struct in_addr s_un_b;

struct s_un_w;

unsigned long s_addr;

} s_un;

} in_addr;

sin_family指代協議族,在socket程式設計中只能是af_inet

sin_port儲存埠號(使用網路位元組順序)

sin_addr儲存ip位址,使用in_addr這個資料結構

sin_zero是為了讓sockaddr與sockaddr_in兩個資料結構保持大小相同而保留的空位元組。

s_addr按照網路位元組順序儲存ip位址

sockaddr_in和sockaddr是並列的結構,指向sockaddr_in的結構體的指標也可以指向

sockadd的結構體,並代替它。也就是說,你可以使用sockaddr_in建立你所需要的資訊,

在最後用進行型別轉換就可以了bzero((char*)&mysock,sizeof(mysock));//初始化

mysock結構體名

mysock.sa_family=af_inet;

mysock.sin_addr.s_addr=inet_addr("192.168.0.1");

……等到要做轉換的時候用:

(struct sockaddr*)mysock

sockaddr與sockaddr in結構體簡介

struct sockaddr sa family是位址家族,一般都是 af 的形式。好像通常大多用的是都是af inet。sa data是14位元組協議位址。此資料結構用做bind connect recvfrom sendto等函式的引數,指明位址資訊。但一般程式設計中並不直接針對此資料結構操作...

sockaddr與sockaddr in結構體簡介

struct sockaddr sa family是位址家族,一般都是 af 的形式。好像通常大多用的是都是af inet。sa data是14位元組協議位址。此資料結構用做bind connect recvfrom sendto等函式的引數,指明位址資訊。但一般程式設計中並不直接針對此資料結構操作...

sockaddr與sockaddr in結構體簡介

struct sockaddr sa family是位址家族,一般都是 af 的形式。好像通常大多用的是都是af inet。sa data是14位元組協議位址。此資料結構用做bind connect recvfrom sendto等函式的引數,指明位址資訊。但一般程式設計中並不直接針對此資料結構操作...