sockaddr和sockaddr in的區別

2021-07-05 22:54:49 字數 1923 閱讀 7894

from:

初學者很容易對二者有困惑的感覺,下面來講一下二者的區別。

sockaddr是在標頭檔案 /usr/include/bits/socket.h 中定義的,如下:

view source

print?

1.structsockaddr

2.;

而sockaddr_in是在標頭檔案 /usr/include/netinet/in.h 中定義的,如下:

view source

print?

01./* structure describing an internet socket address.  */

02.structsockaddr_in

03.;

14.

15./* internet address. */

16.typedefuint32_t in_addr_t;

17.structin_addr

18.;

二者的占用的記憶體大小是一致的,因此可以互相轉化,從這個意義上說,他們並無區別。

sockaddr常用於bind、connect、recvfrom、sendto等函式的引數,指明位址資訊。是一種通用的套接字位址。而sockaddr_in 是internet環境下套接字的位址形式。所以在網路程式設計中我們會對sockaddr_in結構體進行操作。使用sockaddr_in來建立所需的資訊,最後使用型別轉化就可以了。下面是乙個完整的例子。

view source

print?

01.#include

02.#include

03.#include

04.#include

05.

06.intmain(intargc,char**argv)

07.

題外話,兩個函式 htons() 和 inet_addr()。

htons()作用是將埠號由主機位元組序轉換為網路位元組序的整數值。(host to net)

inet_addr()作用是將乙個ip字串轉化為乙個網路位元組序的整數值,用於sockaddr_in.sin_addr.s_addr。

inet_ntoa()作用是將乙個sin_addr結構體輸出成ip字串(network to ascii)。比如:

view source

print?

1.printf("%s",inet_ntoa(mysock.sin_addr));

htonl()作用和htons()一樣,不過它針對的是32位的,而htons()針對的是兩個位元組,16位的。

與htonl()和htons()作用相反的兩個函式是:ntohl()和ntohs()。

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的區別

二者的占用的記憶體大小是一致的,因此可以互相轉化,從這個意義上說,他們並無區別。sockaddr常用於bind connect recvfrom sendto等函式的引數,指明位址資訊。是一種通用的套接字位址。而sockaddr in 是internet環境下套接字的位址形式。所以在網路程式設計中我...