Advertisement

socket编程支持字节顺序、IP地址转换功能及sockaddr数据结构

阅读量:

网络字节序

内存中的长数据块在内存中的存储位置遵循大端或小端规则,磁盘文件中的长数据块在存储位置上同样遵循其自身的偏移量的大端或小端规则。

在网络数据流中存在大端与小端之分,请问如何定义网络数据流的地址呢?通常情况下,“发送主机”会按照内存地址由低到高的顺序发送缓冲区中的数据至网络上,“接收主机”则会按照内存地址由低到高的顺序将接收到的数据保存至接收缓冲区中。“由此可得:在网络数据流中规定先发出的数据为较低地址而后续发出的数据则为较高地址。”

TCP/IP协议规定为网络数据流量采用大端字节顺序编码原则(即以低位地址开头高位地址结束)

为了确保网络程序在不同体系结构上的可移植性,并使得相同来源的C代码能够在大端和小端系统上正确编译运行,则可以通过调用下列库函数来完成网络字节序与主机字节序之间的转换。

复制代码
    #include <arpa/inet.h>
    
    uint32_t htonl(uint32_t hostlong);
    uint16_t htons(uint16_t hostshort);
    uint32_t ntohl(uint32_t netlong);
    uint16_t ntohs(uint16_t netshort);

分别用h、n、l、s表示host、network、32位长整数和16位

全部评论 (0)

还没有任何评论哟~