各个用户的硬件可能是不同的, 不同的机器对数据存储时其字节顺序是不一样的, 那么硬件已经决定了数据的存放结构不一样,为了保证各个硬件之间能够正确交换数据, 所有在网络上传播的数据就应该是同样的存储结构, 各个硬件都提供对应本机器的转换函数.
假设又这样两台机器,分别名为 A,B; 对于一个整数4,再A,B机器种存储的结构分别是
A ---- 0000 0100
B ---- 0100 0000
当然,这个假设不一定正确,仅仅为了说明问题.
按照我们所学,A机器的存储方式应该是正统的和正确的。但是没有人可以说B机器存储的不对,因为它自己会把0100 0000转换成0000 0100来计算的。
既然各种机器可能有各自不同存储数据的方式,当A机器的0000 0100传递给B机器的时候,B机器一定会得到一个错误的值。显而容见,B机器会吧0000 0100计算成 64而不是4,这违背了A机器的意愿。
所以约定了再网络种传输的时候,所有的机器用同一种传输方式,也就是说数据的字节顺序大家都使用一样的顺序。如果说所有的厂商规定了都使用A机器的方式(称为网络字节顺序),那么B机器必须提供一个函数,吧本机的存储结构转换成网络字节顺序传递出去,B机器收数据的时候也应该提供一个函数吧网络字节顺序的数据转换成本机能够识别的结构。
这两个函数分别是
htonl() ------ host to network long型的数据
ltohl() ------ network to host long型的数据
当然就有 htons() ntohs() 的函数, 这套函数由各个自己自己实现,所以实现肯定是不一样的,但是对外提供的接口是一样的。