文章详情

  • 游戏榜单
  • 软件榜单
关闭导航
热搜榜
热门下载
热门标签
php爱好者> php文档>使用ACE_CDR类进行网络编解码(5-1)

使用ACE_CDR类进行网络编解码(5-1)

时间:2010-10-25  来源:ronat

  在网络上传输数据,我们需要对数据进行编码和解码。网络传输的编解码通常要处理字节序和紧缩的问题。   字节序就是超过一个字节的数据类型在内存中的表示方式。关于字节序的详细介绍请在网上搜索相应的文章。约定的网络字节序采用大端表示法,
但是intel架构的PC机,包括现在很多intel芯片的服务器都是用小端表示法。早期的大型机和小型机多用大端表示法。
    现在来看,网络字节序采用大端表示法,其实是很不“环保”的。互联网中的绝大多数电脑是用小端表示法,可偏偏选用大端表示法作为网络字节序。
这样导致了很多没必要的转换。如果网络字节序采用小端表示法,每天发生在互联网上的字节序转换会少得多,呵呵。
    除非你写的是一个封闭的系统,且你可以100%肯定系统内所有机器都使用相同的字节序,否则还是应该坚持使用网络字节序(也就是大端big-endian表示法)
来进行网络数据的编解码。
    一般用htons,htonl进行本地字节序到网络字节序的转换,即(host to net),前者处理short即2字节整数,后者处理long即4字节整数。
如果本地字节序也是大端表示法,则这两个方法什么也不做。在有的系统上这两个方法被实现成宏,以节约一次调用开销。于之对应的还有ntohs和ntohl,
负责从网络字节序转换到本地字节序。
    对于long long类型即8字节整数,就只能自己进行转换,比较麻烦。     紧缩一般是为了避免不同主机间字节对齐的标准不一样,同时还可以节约带宽。比如下面的结构体。

struct a
{
   char a_;
   long b_;
};

    在windows平台用vc编译,默认情况下这个结构体的实例的大小为8个字节,即按4字节进行了对齐。一般对于这样的数据在编码时会进行一次紧缩,
紧缩后变为5个字节。解码时再对逐个成员赋值一次,恢复为本地标准。
    自行处理这些细节,并不复杂,但很繁琐。而且出了问题调试很麻烦,一般要直接看内存buffer才能定位问题。所以尽量不要自己干这个事。

相关阅读 更多 +
排行榜 更多 +
辰域智控app

辰域智控app

系统工具 下载
网医联盟app

网医联盟app

运动健身 下载
汇丰汇选App

汇丰汇选App

金融理财 下载