进程标识
字节序
采用大小模式对数据进行存放的主要区别在于在存放的字节顺序,大端方式将高位存放在低地址,小端方式将高位存放在高地址。
采用大端方式进行数据存放符合人类的正常思维,而采用小端方式进行数据存放利于计算机处理。到目前为止,采用大端或者小端进行数据存放,其孰优孰劣也没有定论。
地址格式
![](https://i-blog.csdnimg.cn/direct/facac62d93cb4eb3aa5cf52d32761f29.png)
sockaddr 依赖于当前用到的协议族中的地址信息 The sockaddr structure is defined as something like:
struct sockaddr {
sa_family_t sa_family;
char sa_data[14];
}
不同的协议族 来 绑定自己这端的地址 所用的结构体是不一样的。所以是不存在 struct sockaddr 类型的。所以我们的处理方式是:我们用的是哪一个协议族,就把该协议族地址作为addr ,然后再把地址长度写到addrlen
AF_INET 协议族中的 协议地址类型为 struct sockaddr_in
![](https://i-blog.csdnimg.cn/direct/57bf4289b10148e8b7bda06a2adc5f2d.png)
/*
注意 :IP地址和端口,是需跟着网络一起发送的。代表自己的身份
*/
struct sockaddr_in {
//协议族 address family: AF_INET
sa_family_t sin_family;
//需要的端口
in_port_t sin_port;
//IP地址 并非点分式,而是大整数internet address ,用的时候需要格式转换:inet_pton()
struct in_addr sin_addr;
};
/* Internet address. */
struct in_addr {
uint32_t s_addr; /* address in network byte order */
};
二进制地址格式 与 点分十进制字符表示(a.b.c.d) 相互转换
![](https://i-blog.csdnimg.cn/direct/c238fd077ad14282b69aa9f14af1461d.png)
将套接字与地址关联
![](https://i-blog.csdnimg.cn/direct/c3a4c54434da4209aecc4abef0d30cd5.png)
获取 绑定到套接字的地址
![](https://i-blog.csdnimg.cn/direct/6001e7885c0546a8873e41f405f5d0c8.png)