整(解)编
来源:互联网 发布:淘宝河北邢台羊绒衫 编辑:程序博客网 时间:2024/06/05 08:44
ACE整编和解编使用总结
在做网络通信时,由于不同硬件和操作系统之间的差异,是跨平台通信需要处理比较复杂的字节序,以字节对齐的问题。这些问题手工处理起来比较复杂,而且容易出错。
使用ACE提供的整编和解编类:ACE_OutputCDR和ACE_InputCDR可以很好处理平台差异带来的问题。现在总结如下:
一:发送端
1.创建流,指定流中数据的长度
ACE_OutputCDR payload (max_payload_size);
2.向流中插入需要发送到内容:
payload << log_record;
其中操作符:<<是经过重载的:
int operator<< (ACE_OutputCDR &cdr, const ACE_Log_Record &log_record)
{
// 发送到内容的长度
size_t msglen = log_record.msg_data_len ();
ACE_Log_Record &nonconst_record = (const_cast<ACE_Log_Record&> (log_record));
// 把发送的结构中的每个内容依次插入到流中,在解编的时候,依次读出。
cdr << ACE_CDR::Long (log_record.type ());
cdr << ACE_CDR::Long (log_record.pid ());
cdr << ACE_CDR::Long (log_record.time_stamp ().sec ());
cdr << ACE_CDR::Long (log_record.time_stamp ().usec ());
cdr << ACE_CDR::ULong (msglen);
cdr.write_char_array (nonconst_record.msg_data (), msglen);
return cdr.good_bit ();
}
3.通过payload.begin ()->rd_ptr ()指定要发送的消息链的首个消息块的地址。
二:接收端
1.总结解编的使用方法。
消息头部信息是接下来的消息内容的长度和字节序。接收到消息后,按照整编的顺序,把消息的各个部分依次解编出来。
我理解整编和解编就是一个消息流,可把任何类型的数据插入到流中,在接收到时候,只要按照插入时代顺序依次把流中的数据提取出来就可以了。由于整编解编解决的问题是字节序和字节对齐的问题,所以,在整编时要指定发送方的字节序,并在解收的时候,先提取出字节序内容,再把解编流按提取出的字节序设置。在解编之前,需要把解编流设置字节对齐,按8字节对齐。
// 按整编顺序解编出数据。
int operator>> (ACE_InputCDR &cdr, ACE_Log_Record &log_record)
{
ACE_CDR::Long type;
ACE_CDR::Long pid;
ACE_CDR::Long sec, usec;
ACE_CDR::ULong buffer_len;
// Extract each field from input CDR stream into <log_record>.
if ((cdr >> type) && (cdr >> pid) && (cdr >> sec) && (cdr >> usec)&& (cdr >> buffer_len))
{
ACE_TCHAR log_msg[ACE_Log_Record::MAXLOGMSGLEN+1];
log_record.type (type);
log_record.pid (pid);
log_record.time_stamp (ACE_Time_Value (sec, usec));
cdr.read_char_array (log_msg, buffer_len);
log_msg[buffer_len] = '\0';
log_record.msg_data (log_msg);
}
return cdr.good_bit ();
}
设置字节对齐
// 按8字节对齐
ACE_CDR::mb_align (payload);
- 整(解)编
- Base64编解代码
- 编解ASCII码
- 缓存编(转)
- 编解码学习笔记(十二):其他编解码
- 编解码学习笔记(十二):其他编解码
- 编解码学习笔记(十二):其他编解码
- (一三九)静态联编和动态联编
- 编解码学习笔记(十二):其他编解码
- 硬件编解码(一)硬件编解码介绍
- 关于watch解编程序
- excel vba(编程编)
- GB2312编码表(完整)
- DS18B20控制程序(自编)
- c++ 网络编(1)
- 网编基础(1)
- 网编基础(2)
- 编绎ijkplayer(一)
- linux shell编程指南第七章------正则表达式介绍
- 无线wifi密码的破解
- 结构体存储分配
- 将GMT时间字符串转换为DateTime类型
- 枚举算法(判断n是否能被3,5,7整除)
- 整(解)编
- JAVA基础知识精华总结
- PHP 小方法总结
- Java基础:异常处理
- alter table move与shrink space
- __proto__和prototype
- 由京东发货引发的思考和分析
- shell脚本编程
- 网页中加入百度地图(带地区搜索)