12.2 套接字寻址方式
在第12.1节的函数介绍中使用了套接字的函数创建和连接套接字Socket。大家会发现,在套接字的监听和连接创建部分都少不了要传入一个地址参数,这个地址可能是IPv4,也可能是IPv6。操作系统套接字就是通过地址和端口,在互联网上查询地址所在的连接,从而形成一个可信赖的通信管道。本节来了解套接字的寻址方式。
1.字节顺序切换
在不同的处理器架构下,发送的信息具有不同的字节顺序,如果要实现不同架构机器之间的通信,那么就必须要统一字节的顺序。使用TCP/IP的时候,有如下4种方式可以用来处理字节顺序和网络顺序之间切换不同的变化。
//32 位的主机切换32 位网络
uint32_t htonl(uint32_t hostint32);
//16 位主机切换16 位网络
uint16_t htons(uint16_t hostint16);
//32 位网络切换32 位主机
uint32_t ntohl(uint32_t netint32);
//16 位网络切换16 位主机
uint16_t ntohs(uint16_t netint16);
2.地址格式说明
地址和通信的作用域相关,所以为了让各种格式的地址(如用域名和端口等表示的地址)都能够传入套接字的参数,那么地址在传入参数前需要统一切换成API能使用的格式sockaddr。在Windows或者Linux系统下都提供了对应的结构体来表示,如下:
struct sockaddr
{
unsigned char sa_len;
sa_family_t sa_family;
char sa_data[14];
}
另外ÿ