使用ACE_CDR类进行网络编解码(5-5)
时间:2010-10-25 来源:ronat
最后总结一下,要用ACE_CDR类来处理网络数据编解码,首先修改ACE的config.h文件。加上以下行,并重新编译。
#define ACE_ENABLE_SWAP_ON_WRITE |
第一行的作用是让ACE_OutputCDR在编码时自动处理字节序的转换,参见本系列文章(2)中的说明。
第二行的作用是让CDR类在编解码时进行紧缩处理,参见本系列文章(3)中的说明。
最后一行可以只在用CDR类直接操纵原始buffer的时候才定义,以避免ACE隐式对齐调整可能引入的BUG,如果是接合ACE_Message_Block用的话就没必要定义。参见本系列文章(4)中的说明。
然后在创建CDR对象时显式的指定使用大端字节序类型,如下:
ACE_OutputCDR ocdr(&mb, ACE_CDR::BYTE_ORDER_BIG_ENDIAN); |
如果是早期版本的ACE就直接用硬编码的数字0指定大端字节序。
ACE_OutputCDR ocdr(&mb, 0); |
总的来说,CDR类还是很好用的,由其是结合ACE_Message_Block一起。也强烈推荐结合ACE_Message_Block一起用,这样不用定义上面的第三行宏。而且如果是使用像proactor这样的框架时,是一定要结合ACE_Message_Block一起用的。