sockaddr結構與sockaddr in結構

2021-06-09 21:23:17 字數 988 閱讀 5954

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結構

位址族來自address family的翻譯,可以看成是套接字的型別,即不同的套接字對應不同的位址族。每種型別的套接字都擁有自己獨特的通訊定址方式。位址族的取值包括af inet af inet6以及af unspec等,這些值在winsock2.h中定義。sockaddr結構用於儲存套接字位址。在...

sockaddr資料結構

strcutsockaddr 很多網路程式設計函式誕生早於ipv4協議,那時候都使用的是sockaddr結構體,為了向前相容,現在sockaddr退化成了 void 的作用,傳遞乙個位址給函式,至於這個函式是sockaddr in還是sockaddr in6,由位址族確定,然後函式內部再強制型別轉化...

sockaddr與sockaddr in的比較

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