老问题, 网络编程中, 传输int, word,long等受大端小端(跨平台)影响的数据类型如何处理?
在网络编程中结构体传输是否一定要进行序列化才行呢 ?

解决方案 »

  1.   

    格式化成对应的字符串现在有用xml作为数据传输接口了
      

  2.   

    这样影响了服务器的性能吧, 能不能不将int,word类型的数据转换成字符串呢?用其它方法?
    还有, 感觉现在是不是百分之八九十的CPU都是小端字节序?
      

  3.   

    自己定义数据类型,不适用系统的那几个
    typedef unsigned char  uint8;
    typedef unsigned short uint16;
    typedef unsigned long  uint32; 
    typedef unsigned __int64   uint64;
      

  4.   

    htonl, htons, ntohl, ntohs 
    不太明白大家讨论的,用这几个函数不可以吗。?
      

  5.   

    我也不太明白大家讨论的,把int word long等当做一个结构传过去,那边恢复不行吗?
      

  6.   

    你说的大端小端问题不存在 传输的时候是字节流,直接转换成char传输就可以了
      

  7.   

    大端小端和传输有什么关系?你自己约定好了一种解析方式就可以了。就和int和unsigned int的关系一样,你当成什么就是什么。
      

  8.   

    传输的时候肯定是二进制 进行传送, 但是你另一端对这个二进制进行解析的时候, 如果直接将二进制转换成int,word,long , 不同的大端小端系统,转换成数值的时候是不一样的吧?
      

  9.   


    问题是把int, word, long,结构体等类型的数据转换成字符串有点麻烦!
      

  10.   

    其实我是想问问大家对于这种现象是如何解决的, (最好能说说在游戏服务器中如何解决的)
    ///////////////////////////////数值:0x1245
    在X86系统中这样存储
    内存地址   数据
    00          12
    01          45发送时从低地址读取数据
    所以发送顺序为 12  45而在其它系统中有可能这样存储:
    内存地址   数据
    00          45
    01          12
    如果不转换为网络字节序,按 45 12发送,则X86系统就理解为0x4512了。 
    ///////////
    在上面这种情况下, 我们如何保证另外一端(不确定是什么类型的系统)正确接收数据呢?
      

  11.   


    标准的网络程序是要求发送时转字节序的。 如果不转,两侧都是X86自然不会有什么问题,一般X86,一边PowerPC自然就挂了,这个问题现在是必须考虑的,上网本以后可能会流量ARM,MIPS等架构,而且即使在一台x86机器上,WINdows下的程序和java虚拟机的程序通讯时也会出问题,至于htonl,htons转字节序那点消耗,大可直接忽略,如果需要转的太多,可自己定义宏去转来提高性能。除了网络程序,读写二进制文件也存在相同问题。 所以严格来说: 一块二进制数据,可能是数据包,内存数据,文件等在可能不同字节序环境下使用时,必须要转为统一字节序。如果仅仅为了实现功能,楼主将转字节序的功能交给客户端,当然,这样是不合理的。  
    客户端如果和服务端字节序一样,则不转。
    不一样,则转,服务端不用做任何操作,如果服务端也有多种字节序,还真是比较麻烦。