• 26字节序


    网络通信

    主机---主机

    主机---服务器

    主机---服务器---主机

                    主机--主机

                    主机---服务器

     

                  主机---服务器—主机

    网络字节序   -- 使用大字节序

    #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);

    网络通信的数据使用大字节序,但存储在主机上是小字节序

    大字节序(大端):数据的高位保存在内存高位

    小字节序(小端):数据的低位保存在内存高位

    注意:大小字节序 由 CPU 决定,和 操作系统无关,所以我们的个人PC 一般是  X86

    CPU : 小字节序

    PPC 型 CPU: 大字节序

    例子:

    小字节序: int x = 0x12345678

    它在内存里面存储方式:           0x78  0x56  0x34  0x12

    char *pArr;

    pArr = (char*)&x;

    pArr[0] =  0x78

    pArr[1] =  0x56

    pArr[2] =  0x34

    pArr[3] =  0x12

    解析:

    pArr , pArr+1 都是地址,那个大?

    --> pArr 对应的是内存的低端(相对pArr+1), pArr+1对应的内存的高端

    --> int x, 数据的低位存在低端内存, 高位存在高端内存

    --> x 占 4个字节,这四个字节的地址分别是 pArr, pArr+1,pArr+2,pArr+3

    --> pArr 这个字节的内存存的是 x 的低位,也就是 0x78

    --> pArr+3 这个字节的内存存的是 x 的高位,也就是 0x12

    我们malloc一片内存

    char *pBuf = (char*)malloc(256) = (分配的地址为)0xFFFF1000

    & (pBuf[0])  = 0xFFFF1000           数据的高位,放在内存的地位

    & (pBuf[1])  = 0xFFFF1000 + 1

    网络字节序: 使用大字节序

    TCP 通信: 面向连接的,可靠的通信方式   

          --> 建立连接,没发送一条消息都需要对方确认收到,否则重发

    UDP 通信: 面向无连接的,不可靠的通信方式

          --> 不建立连接,只管发送,发送完了就不管了

    PF_INET    protocol family  --> IPV4 协议

    AF_INET    address  family

    两者值一样,意义不同

  • 相关阅读:
    在 Debian 中安装 fcitx 输入法
    Windows XP字体模糊
    Aptana 行号
    硬盘安装Ubuntu 12.04
    更新系统时跳过某个软件包
    最小化安装CentOS 6.3
    使用config自定义配置
    获取指定文件夹内的文件
    把数据导出到的Excel文件
    web页面上通过后台弹出消息框的几种方式
  • 原文地址:https://www.cnblogs.com/gd-luojialin/p/9216034.html
Copyright © 2020-2023  润新知