Welcome 微信登录
编程资源 图片资源库 蚂蚁家优选 PDF转换器

首页 / 操作系统 / Linux / Linux环境下网络编程杂谈

今天我们说说“Pre-网络编程”。内容比较杂,但都是在做网络应用程序开发过程中经常要遇到的问题。一、大端、小端和网络字节序小端字节序:little-endian,将低字节存放在内存的起始地址;大端字节序:big-endian,将高字节存放在内存的其实地址。例如,数字index=0x11223344,在大小端字节序方式下其存储形式为:
上图一目了然的可以看出大小端字节序的区别。还有另外一个概念就是网络字节序。网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian方式。注意:X86系列CPU都是小端little-endian字节序,即低字节存低位,高字节存高位。为此,Linux专门提供了字节转换函数.unsigned long  int htonl(unsigned long  int hostlong)unsigned short int htons(unisgned short int hostshort)unsigned long  int ntohl(unsigned long  int netlong)unsigned short int ntohs(unsigned short int netshort)在这四个转换函数中,h代表host,n代表 network,s代表short,l代表long 。htonl()函数的意义是将本机器上的long数据转化为网络上的long。其他几个函数的意义也差不多。看个例子:
也就是说对于从网络上接收到的非单子节的基本数据类型数据,首先需要用ntohl(s)将其转换成本地字节序;同理,发往网络的非单子节的基本数据类型数据,首先用htonl(s)将其转换成网络字节序。这里最常见的就是IP地址和端口号。