struct sockaddr和struct sockaddr_in這兩個結構體用來處理網路通訊的位址。
在各種系統呼叫或者函式中,只要和網路位址打交道,就得用到這兩個結構體。
1 位址型別: ipv4還是ipv6
2 ip位址
3 埠
相應的,標頭檔案有如下定義:
1 include in.h>23注釋中標明了屬性的含義及其位元組大小,這兩個結構體一樣大,都是16個位元組,而且都有family屬性,不同的是:struct
sockaddr ;78
//ipv4 af_inet sockets:910
struct
sockaddr_in ;
1617
struct
in_addr ;
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,作為引數傳遞給系統呼叫函式
網路程式設計中一段典型的**為:
1intsockfd;
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 ...