(2)、sockaddr_in结构体 struct sockaddr_in { sa_family_t sin_family; //代表16位地址类型,若为IPv4,那么输入的参数就为:AF_INET,若为IPv6,那么输入的参数就为:AF_INET6 in_port_t sin_port; //代表16位端口号 struct in_addr sin_addr; //代表32位IP地址,是一个结构体 }; sockaddr_in结构体...
sockaddr_in中的in就表示internet也就是网络地址的意思,它弥补了sockaddr的缺陷,把port(端口号),和addr(目标地址)分开存储在两个变量中。 总结 二者长度一样,都是16个字节,即占用的内存大小是一致的,因此可以互相转化。二者是并列结构,指向sockaddr_in结构的指针也可以指向sockaddr。 sockaddr常用于bind、connect、recv...
sockaddr_in在头文件#include<netinet/in.h>或#include <arpa/inet.h>中定义,该结构体解决了sockaddr的缺陷,把port和addr 分开储存在两个变量中,如下: sin_port和sin_addr都必须是网络字节序(NBO),一般可视化的数字都是主机字节序(HBO)。 三、总结 二者长度一样,都是16个字节,即占用的内存大小是一致的,因此...
sockaddr和sockaddr_in包含的数据都是一样的,但他们在使用上有区别: 程序员不应操作sockaddr,sockaddr是给操作系统用的 程序员应使用sockaddr_in来表示地址,sockaddr_in区分了地址和端口,使用更方便。 一般的用法为: 程序员把类型、ip地址、端口填充sockaddr_in结构体,然后强制转换成sockaddr,作为参数传递给系统调用函数...
sockaddr和sockaddr_in包含的数据都是一样的,但他们在使用上有区别: 程序员不应操作sockaddr,sockaddr是给操作系统用的 程序员应使用sockaddr_in来表示地址,sockaddr_in区分了地址和端口,使用更方便。 一般的用法为: 程序员把类型、ip地址、端口填充sockaddr_in结构体,然后强制转换成sockaddr,作为参数传递给系统调用函数...
(struct sockaddr) - __SOCKADDR_COMMON_SIZE - sizeof (in_port_t) - sizeof (struct in_addr)]; /* 字符数组sin_zero[8]的存在是为了保证结构体struct sockaddr_in的大小和结构体struct sockaddr的大小相等 */ }; struct sockaddr是通用的套接字地址,而struct sockaddr_in则是internet环境下套接字的...
sockaddr_in, sockaddr, in_addr区别 网络字节序和主机字节序 大端模式,是指数据的高字节保存在内存的低地址中,而数据的低字节保存在内存的高地址中,这样的存储模式有点儿类似于把数据当作字符串顺序处理:地址由小向大增加,而数据从高位往低位放;这和我们的阅读习惯一致。
sockaddr和sockaddr_in的长度相同,都是16字节,只是将IP地址和端口号合并到一起,用一个成员sa_data表示。要想给sa_data赋值,必须同时指明IP地址和端口号,例如"127.0.0.1:80",遗憾的是,没有相关函数将这个字符串转换成需要的形式,也就很难给sockaddr类型的变量赋值,所以使用sockaddr_in来代替。这两个结构体的长度...