在linux环境下,结构体struct sockaddr在/usr/include/linux/socket.h中定义,具体如下: typedef unsigned short sa_family_t; struct sockaddr { sa_family_t sa_family; /*...
sockaddr_in在头文件#include<netinet/in.h>或#include <arpa/inet.h>中定义,该结构体解决了sockaddr的缺陷,把port和addr 分开储存在两个变量中,如下: sin_port和sin_addr都必须是网络字节序(NBO),一般可视化的数字都是主机字节序(HBO)。 三、总结 二者长度一样,都是16个字节,即占用的内存大小是一致的,因此...
sockaddr_in和sockaddr是并列的结构,指向sockaddr_in的结构体的指针也可以指向 sockaddr的结构体,并代替它。也就是说,你可以使用sockaddr_in建立你所需要的信息, 然后用memset函数初始化就可以了memset((char*)&mysock,sizeof(mysock));//初始化 sockaddr_in mysock; memset((char*)&mysock,sizeof(mysock));...
首先,我们需要明确,sockaddr_in结构体中的各个成员的数据类型。 structsockaddr_in { sa_family_t sin_family;/*协议族,通常为AF_INET*/in_port_t sin_port;/*网络字节序的端口号*/structin_addr sin_addr;/*IP地址结构体*/};/*Internet address.*/structin_addr { ...
struct sockaddr 和 struct sockaddr_in 这两个结构体用来处理网络通信的地址。 一、sockaddr sockaddr在头文件#include <sys/socket.h>中定义,sockaddr的缺陷是:sa_data把目标地址和端口信息混在一起了,如下: struct sockaddr { unsigned short sa_family;//2字节,地址族,AF_xxx ...
sockaddr和sockaddr_in的长度相同,都是16字节,只是将IP地址和端口号合并到一起,用一个成员sa_data表示。要想给sa_data赋值,必须同时指明IP地址和端口号,例如"127.0.0.1:80",遗憾的是,没有相关函数将这个字符串转换成需要的形式,也就很难给sockaddr类型的变量赋值,所以使用sockaddr_in来代替。这两个结构体的长度...
其实,sockaddr和sockaddr_in就是两个用于处理网络通信地址的结构体。sockaddr是在IPv4协议诞生之前就存在了,而sockaddr_in是在IPv4协议诞生之后被提出的,两者在数据结构上具有差异。下图为sockaddr和sockaddr_in的数据结构图。 (二)sockaddr和sockaddr_in区别是什么 根据上面的数据结构图,我们可以得到两者的结构体定义: (...
sockaddr_in在头文件#include<netinet/in.h>或#include <arpa/inet.h>中定义,该结构体解决了sockaddr的缺陷,把port和addr 分开储存在两个变量中,如下: sin_port和sin_addr都必须是网络字节序(NBO),一般可视化的数字都是主机字节序(HBO)。 三、总结 ...
在網際網路位址家族中,Windows Sockets 使用 SOCKADDR_IN 結構來指定與通訊端連接的本機或遠端端點位址。複製 struct sockaddr_in{ short sin_family; unsigned short sin_port; struct in_addr sin_addr; char sin_zero[8]; }; 參數sin_family 位址家族 (必須是 AF_INET)。 sin_port IP 通訊埠。 sin_...