• 主机序和网络序以及使用例子


    为什么存在这两个东西:

        空中传输的字节的顺序即网络字节序为标准顺序,考虑到与协议的一致以及与同类其它平台产品的互通,在程序中发数据包时,将主机字节序转换为网络字节序,收数据包处将网络字 节序转换为主机字节序

      网络程序开发时 或是跨平台开发时 应该注意保证只用一种字节序 不然两方的解释不一样就会产生bug

    主机序:

      不同的CPU有不同的字节序类型 这些字节序是指整数在内存中保存的顺序 这个叫做主机序

      1. Little endian:将低序字节存储在起始地址 
      2. Big endian:将高序字节存储在起始地址 

          LE little-endian 
        最符合人的思维的字节序 
        地址低位存储值的低位 
        地址高位存储值的高位 
        怎么讲是最符合人的思维的字节序,是因为从人的第一观感来说 
        低位值小,就应该放在内存地址小的地方,也即内存地址低位 
        反之,高位值就应该放在内存地址大的地方,也即内存地址高位 

          BE big-endian 
        最直观的字节序 
        地址低位存储值的高位 
        地址高位存储值的低位 
        为什么说直观,不要考虑对应关系 
        只需要把内存地址从左到右按照由低到高的顺序写出 
        把值按照通常的高位到低位的顺序写出 
        两者对照,一个字节一个字节的填充进去

    网络序:

      网络字节顺序是TCP/IP中规定好的一种数据表示格式,它与具体的CPU类型、操作系统等无关,从而可以保证数据在不同主机之间传输时能够被正确解释。网络字节顺序采用big endian排序方式。

    常用的转换函数:

      htons ntohs htonl ntohl (s 就是short l是long h是host n是network)

    例子

    。。。。。。
            struct sockaddr_in   client,server;
            char    buf[MAX_LEN];
            char flag[MAX_LEN];
            FILE    *fq_send=NULL,*fq_rec=NULL;
            int     len,opt = 1;
     
            if( ( sd = socket(AF_INET,SOCK_STREAM,0)) == -1 )
            {
                    perror("socket");
                    exit(1);
            }
            bzero(&server,sizeof(server));
            server.sin_family = AF_INET;
            server.sin_port = htons(SER_PORT);//将端口号的主机序转为网络序
            server.sin_addr.s_addr = inet_addr("127.0.0.1");
            setsockopt(sd,SOL_SOCKET,SO_REUSEADDR,&opt,sizeof(opt));
            if( connect(sd,(struct sockaddr *)&server,sizeof(server)) < 0 )
            {
                    perror("Connect");
                    close(sd);
                    exit(1);
            }            
    。。。。。。

      

  • 相关阅读:
    Kafka的Controller Broker
    mac之kafkaeagle安装
    Kafka数据积压(消费者如何提高吞吐量)
    Kafka消费者配置调优
    kafka文件存储形式
    Kafka Broker调优总结
    mac下启动arthsa
    C# 通过TaskCompletionSource解决async/await死锁的问题
    vs使用nuget包时,发现无法解析的“xxx”的不同版本之间存在冲突
    bootrsap 的 form表单 布局代码
  • 原文地址:https://www.cnblogs.com/zzy-frisrtblog/p/5839545.html
Copyright © 2020-2023  润新知