ACE学习笔记(二)

来源:互联网 发布:java finalize 编辑:程序博客网 时间:2024/04/29 12:13

今天又把ACE的整编和解编看了看,看看ACE_OutputCDR和ACE_InputCDR都做了什么,我就想知道两点,一是它内部的数据时怎么保存的,二是它在什么地方用到了hton*和ntoh*函数。

 我只看了write_2和read_2函数,这2个比较有代表性。

首先它内部数据都保存在了ACE_Message_Block中,对ACE_OutputCDR::write_2,我没有定义ACE_ENABLE_SWAP_ON_WRITE,则直接转为char*写进了内存,这里就有个问题,如果我是小端,那么发送出去的字节序也是小端,对端接受时得要知道我发送出去的字节序了。对ACE_InputCDR::read_2,如果没有定义ACE_ENABLE_SWAP_ON_WRITE,则会判断本机字节序和网络字节序是否相同,如果不相同直接不做转换,否则调用ACE_CDR::swap_2。就相当于调用了hton*了。

所以如果自己写程序,接收端和发送端的机器字节序相同,则不要ACE_ENABLE_SWAP_ON_WRITE,也不用考虑字节序的问题,收到ACE_Message_Block时,直接使用应该就可以。或者在发送时候显示指定其为大端ACE_OutputCDR cdr;cdr.reset_byte_order(BYTE_ORDER_BIG_ENDIAN),接收时再转为本机字节序。