粉絲不過W
struct sockaddr 和 struct sockaddr_in 這兩個結構體都是用來 處理網絡通信的地址
/*
*此數據結構用做bind、connect、recvfrom、sendto等函數的參數,指明地址信息
*note:
* 目標地址和端口信息在一起
*/
#include <sys/socket.h>
struct sockaddr
{
//地址家族,一般“AF_xxx”的形式,通常使用AF_INET
unsigned short sa_family;
// 14字節協議地址,目標地址和端口信息
char sa_data[14];
}
#include <netinet/in.h>
struct sockaddr_in
{
short int sin_family; //協議族
unsigned short int sin_port; //端口號(使用網絡字節順序)
struct in_addr sin_addr; //IP地址
unsigned char sin_zero[8]; //sockaddr與sockaddr_in 保持大小相同而保留的空字節
};
struct in_addr
{
unsigned long s_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;
sockaddr_in和sockaddr是並列的結構,指向sockaddr_in的結構體的指針,同樣可以 指向sockraddr的結構體,並代替它
struct sockaddr_in mysock;
bind(sockfd,(struct sockaddr *)&mysock,sizeof(struct sockaddr); /* bind的時候進行轉化 */