C 的socket位址詳解

2021-09-19 01:25:46 字數 2139 閱讀 1699

一 點睛

socket位址分為通用socket位址和專用socket位址。

通用socket位址出現在一些socket api函式中,比如bind函式、connect函式等。

專用socket位址是為了方面使用而提出來的。

兩者可以相互轉換。

二 通用socket位址

通用socket位址是乙個結構體,名字是sockaddr,定義在/usr/include/bits/socket.h中。

#include /* structure describing a generic socket address.  */

struct sockaddr

;

巨集展開後的形式是

struct sockaddr

;

sa_data用來存放位址資料。

協議族位址含義和長度

pf_unix

檔案全路徑名,最大長度可達108位元組。

pf_inet

32位ipv4位址和16位埠號,共6個位元組。

pf_inet6

128位ipv6位址、16位埠號、32位流標識和32位範圍id,共26位元組。

sa_data太小了,容納不下了,怎麼辦?linux定義了新的儲存結構:

struct sockaddr_storage

;

三 專用socket位址

通用位址結構把ip位址和埠號資訊都放到乙個char陣列中,使得使用起來不方便。為此,linux為不同的協議族定義了不同的socket結構體。

1 ipv4的socket位址定義,定義於/usr/include/netinet/in.h

struct sockaddr_in

;

in_addr定義如下:

struct in_addr

;

2 ipv6的socket位址定義,定義於/usr/include/netinet/in.h

struct sockaddr_in6

;

in6_addr定義如下:

struct in6_addr

__in6_u;

#define s6_addr __in6_u.__u6_addr8

#if defined __use_misc || defined __use_gnu

# define s6_addr16 __in6_u.__u6_addr16

# define s6_addr32 __in6_u.__u6_addr32

#endif

};

3 unix本地域協議族定義,定義於/usr/include/linux/un.h

#define unix_path_max   108

struct sockaddr_un ;

這些專用的socket位址結構顯然比通用的socket位址更清楚,把各個資訊用不同的字段來表示。但要注意的是,socket api函式使用的是通用的位址結構,因此我們具體使用的時候,最終要把專用位址結構轉換為通用位址結構,不過可以強制轉換。

四 ip位址的轉換

1 點睛

函式inet_addr將點分十進位制ip位址轉換為二進位制位址

函式inet_aton將點分十進位制ip位址轉換為二進位制位址

函式inet_ntoa將二進位制位址轉換為點分十進位制ip位址

2 **

#include #include int main(int argc, const char * ar**)

3 執行

[root@localhost test]# g++ -o test test.cpp[root@localhost test]# ./testia.s_addr=0x60210acreal_ip=172.16.2.6

Socket的位址查詢

socket的位址查詢函式有很多,分為主機 host 網路 net 協議 proto 和服務 serv 這些函式完成各種位址查詢功能.posix.1定義了兩個新的函式 getaddrinfo和getnameinfo,前者把主機名字和服務名字對映到乙個位址,後者將位址轉換成主機名或伺服器名.這些函式返...

socket 的位址結構

在建立socket通訊的過程中位址起著很關鍵的作用,在設計tcp ip網路程式時,必須對 socket 的位址結構有清晰的認識。tcp ip 的位址資料結構。struct sockaddr struct in addr struct sockaddr in 網路位元組順序是tcp ip中規定好的一種...

socket 的位址結構

在建立socket通訊的過程中位址起著很關鍵的作用,在設計tcp ip網路程式時,必須對 socket 的位址結構有清晰的認識。tcp ip 的位址資料結構。struct sockaddr u short safamily 位址族,af char sa data 14 14位元組的特定協議位址 st...