sockaddr
本詞條缺少
名片圖,補充相關內容使詞條更完整,還能快速升級,趕緊來
編輯吧!
一,用於存儲參與(IP)Windows套接字通信的計算機上的一個internet協議(IP)地址。為了統一地址結構的表示方法 ,統一接口函數,使得不同的地址結構可以被bind()、connect()、recvfrom()、sendto()等函數調用。但一般的編程中並不直接對此數據結構進行操作,而使用另一個與之等價的數據結構sockaddr_in。這是由於Microsoft TCP/IP
套接字開發人員的工具箱僅支持internet地址字段,而實際填充字段的每一部分則遵循sockaddr_in數據結構,兩者大小都是16字節,所以二者之間可以進行切換。
外文名
sockaddr
性 質
通用地址結構
定 義
struct sockaddr {
說 明
sa_data : 是14字節的協議地址
目錄
1
sockaddr
其定義如下:
struct sockaddr {
unsigned short sa_family; /* address family, AF_xxx */
char sa_data[14]; /* 14 bytes of protocol address */
};
unsigned short sa_family; /* address family, AF_xxx */
char sa_data[14]; /* 14 bytes of protocol address */
};
說明:
sa_family :是2字節的地址家族,一般都是“AF_xxx”的形式。通常用的都是AF_INET。
2
sockaddr_in
其定義如下:[1]
struct sockaddr_in {
short int sin_family; /* Address family */
unsigned short int sin_port; /* Port number */
struct in_addr sin_addr; /* Internet address */
unsigned char sin_zero[8]; /* Same size as struct sockaddr */
};
sin_family:指代協議族,在socket編程中只能是AF_INET
sin_port:存儲端口號(使用網絡字節順序)
sin_addr:存儲IP地址,使用in_addr這個數據結構
sin_zero:是為了讓sockaddr與sockaddr_in兩個數據結構保持大小相同而保留的空字節。
short int sin_family; /* Address family */
unsigned short int sin_port; /* Port number */
struct in_addr sin_addr; /* Internet address */
unsigned char sin_zero[8]; /* Same size as struct sockaddr */
};
sin_family:指代協議族,在socket編程中只能是AF_INET
sin_port:存儲端口號(使用網絡字節順序)
sin_addr:存儲IP地址,使用in_addr這個數據結構
sin_zero:是為了讓sockaddr與sockaddr_in兩個數據結構保持大小相同而保留的空字節。
而其中in_addr結構的定義如下:
typedef struct in_addr {
union {
struct{ unsigned char s_b1,s_b2, s_b3,s_b4;} S_un_b;
struct{ unsigned short s_w1, s_w2;} S_un_w;
unsigned long S_addr;
} S_un;
} IN_ADDR;
union {
struct{ unsigned char s_b1,s_b2, s_b3,s_b4;} S_un_b;
struct{ unsigned short s_w1, s_w2;} S_un_w;
unsigned long S_addr;
} S_un;
} IN_ADDR;
闡述下in_addr的含義,很顯然它是一個存儲ip地址的
共用體有三種表達方式:
第一種用四個字節來表示IP地址的四個數字;
第二種用兩個雙字節來表示IP地址;
第三種用一個長整型來表示IP地址。
給in_addr賦值的一種最簡單方法是使用inet_addr函數,它可以把一個代表IP地址的字符串賦值轉換為in_addr類型,如addrto.sin_addr.s_addr=inet_addr("192.168.0.2");
其反函數是inet_ntoa,可以把一個in_addr類型轉換為一個字符串。
