winsock 地址结构

来源:互联网 发布:初等数论难题集淘宝 编辑:程序博客网 时间:2024/04/29 03:54

在Visual C++中,使用结构体in_addr来保存网络字节顺序格式的IP地址,它的定义如下:

struct in_addr

{

union{

struct {u_char s_b1,s_b2,s_b3,s_b4}S_un_b;

struct{u_short  s_w1,u_short  s_w2}S_un_w;

u_long S_addr;

}

}S_un;


struct sockaddr是一个通用的地址结构,定义如下:

struct sockaddr

{

unsigned short sin_family;

char sin_data[14];

}*SOCKADDR;

sin_family是地址家族,一般都用”AF_XXX“的形式,通常用的是AF_INET,

sin_data[14]是14字节地址协议。此数据结构用作bind(),listen(),accept()等函数的参数,但一般在编程中不对其进行操作,而是使用另一个与sockaddr等价的结构体sockaddr_in:

struct sockaddr_in

{

short sin_family; /* Address family 一般来说 AF_INET(地址族)PF_INET(协议族 )*/
unsigned short sin_port; /* Port number (必须要采用网络数据格式,普通数字可以用htons()函数转换成网络数据格式的数字) */
struct in_addr sin_addr; /* Internet address */
unsigned char sin_zero[8]; /* Same size as struct sockaddr 没有实际意义,只是为了
  跟SOCKADDR结构在内存中对齐 */

}*SOCKADDR_IN;

sockaddr 与sockaddr_in是并列的结构体,指向sockaddr_in结构体的指针也可以指向sockaddr,只需做一下强制类型转换即可。







0 0