sockaddr_in结构 sockaddr_in(在netinet/in.h中定义):structsockaddr_in {shortintsin_family;/*Address family*/unsignedshortintsin_port;/*Port number*/structin_addr sin_addr;/*Internet address*/unsignedcharsin_zero[8];/*Same size as struct sockaddr*/};structin_addr { unsignedlongs_addr; }; ...
sockaddr_in(在netinet/in.h中定义): 1structsockaddr_in23{45shortsin_family;/*Addressfamily一般来说AF_INET(地址族)PF_INET(协议族)*/67unsignedshortsin_port;/*Portnumber(必须要采用网络数据格式,普通数字可以用htons()函数转换成网络数据格式的数字)*/89structin_addrsin_addr;/*Internetaddress*/1011unsi...
sockaddr_in在头文件#include<netinet/in.h>或#include <arpa/inet.h>中定义,该结构体解决了sockaddr的缺陷,把port和addr 分开储存在两个变量中,如下: sin_port和sin_addr都必须是网络字节序(NBO),一般可视化的数字都是主机字节序(HBO)。 三、总结 二者长度一样,都是16个字节,即占用的内存大小是一致的,因此...
sin_port:表示端口号,使用16位无符号整数表示,需要使用网络字节序(big-endian)。 sin_addr:表示IPv4地址,使用32位无符号整数表示,也需要使用网络字节序。 sin_zero:在早期版本的sockaddr_in中,这个字段被保留用于填充字节,以使sockaddr_in的大小与sockaddr结构体的大小相同。在实际使用中,一般会将该字段置为0。
设置地址族(AF_INET),端口号(port)和IP地址: sa.sin_family = AF_INET; sa.sin_port = htons(port); // 端口号需要使用htons函数转换为网络字节顺序 sa.sin_addr.s_addr = inet_addr(ip); // IP地址需要使用inet_addr函数转换为网络字节顺序 复制代码 使用sockaddr_in结构体变量: sockaddr_in结构体...
uint16_t sin_port; //16位的端口号 struct in_addr sin_addr; //32位IP地址 char sin_zero[8]; //不使用,一般用0填充 }; sockaddr和sockaddr_in的长度相同,都是16字节,只是将IP地址和端口号合并到一起,用一个成员sa_data表示。要想给sa_data赋值,必须同时指明IP地址和端口号,例如"127.0.0.1:80",...
sockaddr_in中的in就表示internet也就是网络地址的意思,它弥补了sockaddr的缺陷,把port(端口号),和addr(目标地址)分开存储在两个变量中。 总结 二者长度一样,都是16个字节,即占用的内存大小是一致的,因此可以互相转化。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。
sin_port存储端口号(使用网络字节顺序) sin_addr存储IP地址,使用in_addr这个数据结构 sin_zero是为了让sockaddr与sockaddr_in两个数据结构保持大小相同而保留的空字节。 s_addr按照网络字节顺序存储IP地址 sockaddr_in和sockaddr是并列的结构,指向sockaddr_in的结构体的指针也可以指向 ...
*/ unsigned char sin_zero[sizeof (struct sockaddr) - __SOCKADDR_COMMON_SIZE - sizeof (in_port_t) - sizeof (struct in_addr)]; /* 字符数组sin_zero[8]的存在是为了保证结构体struct sockaddr_in的大小和结构体struct sockaddr的大小相等 */ }; struct sockaddr是通用的套接字地址,而struct ...