sockaddr和sockaddr in的區別

2021-07-29 17:22:59 字數 1341 閱讀 2379

struct sockaddr和struct sockaddr_in這兩個結構體用來處理網路通訊的位址。

在各種系統呼叫或者函式中,只要和網路位址打交道,就得用到這兩個結構體。

1 位址型別: ipv4還是ipv6

2 ip位址

3 埠

相應的,標頭檔案有如下定義:

1 include in.h>23

struct

sockaddr ;78

//ipv4 af_inet sockets:910

struct

sockaddr_in ;

1617

struct

in_addr ;

注釋中標明了屬性的含義及其位元組大小,這兩個結構體一樣大,都是16個位元組,而且都有family屬性,不同的是:

sockaddr用其餘14個位元組來表示sa_data,而sockaddr_in把14個位元組拆分成sin_port, sin_addr和sin_zero

分別表示埠、ip位址。sin_zero用來填充位元組使sockaddr_in和sockaddr保持一樣大小。

sockaddr和sockaddr_in包含的資料都是一樣的,但他們在使用上有區別:

程式設計師不應操作sockaddr,sockaddr是給作業系統用的

程式設計師應使用sockaddr_in來表示位址,sockaddr_in區分了位址和埠,使用更方便。

一般的用法為:

程式設計師把型別、ip位址、埠填充sockaddr_in結構體,然後強制轉換成sockaddr,作為引數傳遞給系統呼叫函式

網路程式設計中一段典型的**為:

1

intsockfd;

2struct

sockaddr_in servaddr;

34 sockfd = socket(af_inet, sock_stream, 0);5

6/*填充struct sockaddr_in

*/7 bzero(&servaddr, sizeof

(servaddr));

8 servaddr.sin_family =af_inet;

9 servaddr.sin_port =htons(serv_port);

10 inet_pton(af_inet, "

127.0.0.1

", &servaddr.sin_addr);

1112

/*強制轉換成struct sockaddr

*/13 connect(sockfd, (struct sockaddr *) &servaddr, sizeof

(servaddr));

14

sockaddr in和sockaddr二者區別

2011 07 29 15 28 482人閱讀 0 收藏 舉報 cpp view plain copy print?structsockaddr sockaddr in和sockaddr結構的關係 填值的時候使用sockaddr in結構,而作為函式 如socket,listen,bind等 的引數...

sockaddr和sockaddr in的區別

struct sockaddr和struct sockaddr in這兩個結構體用來處理網路通訊的位址。在各種系統呼叫或者函式中,只要和網路位址打交道,就得用到這兩個結構體。1 位址型別 ipv4還是ipv6 2 ip位址 3 埠 相應的,標頭檔案有如下定義 c include struct soc...

sockaddr和sockaddr in的區別

from 初學者很容易對二者有困惑的感覺,下面來講一下二者的區別。sockaddr是在標頭檔案 usr include bits socket.h 中定義的,如下 view source print?1.structsockaddr 2.而sockaddr in是在標頭檔案 usr include ...