socket基础-网络字节序

//好多天没写了,最近服务器持续更新 2020/7/30
//求批判,求指正

1、在计算机里,有两种字节序:
大端字节序- 低地址高字节,高地址低字节
小端字节序(常用)- 低地址低字节,高地址高字节
两种字节序不同是由于历史原因,标准不同造成的,小端字节序常用。

2、客户端和服务端交互,大小端问题:
服务器和客户端同是小端或是同是大端才能交互,如果服务器和客户端一个是大端,另一个是小端,则无法进行信息传送。

3、网络数据流:
由于发送端通将发送缓冲区中的数据按内存地址从低到高的顺序发出,接收端将从网络上接收的字节依次保存在接收缓冲区,也是按内存地址从低到高的顺序保存。于是乎,网络数据流的地址这样规定:先发出的数据是低地址,后发出的数据是高地址。

4、TPC/IP协议规定:
网络数据流采用大端字节序,即低地址高字节。
如果发送主机是小端字节序,主机将数据发添加到缓冲区之前要做字节序转换。
如果接收主机是小端字节序,也要做字节序转换。

5、c中具体网络字节序与主机字节序转换:
为了让网络程序具有可移植性,并且C语言代码在大端和小端上编译后能正常运行,可以调用如下代码所示是的库函数解析网络字节序和主机字节序的转换。

#include <arpa/inet.h>	//库,头文件
//端口号转换接口
uint32_t htonl(uint32_t hostlong);	//h->host,n->network,l->32位长整数
uint16_t htons(uint16_t hostshort); //同上,s->16,短整数
uint32_t ntohl(uint32_t netlong);	//同上
uint16_t ntohs(uint16_t netshort);	//同上
//不管是客户端还是服务器都会使用这些接口,如果是小端就转换,如果是大端就不用转换(但是接口还是需要写)。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值