ACE_OutputCDR,ACE_InputCDR,ACE_Message_Block使用2
来源:互联网 发布:军事网络的安全保护 编辑:程序博客网 时间:2024/05/16 13:25
一 利用ACE_OutputCDR,ACE_Message_Block发送数据和注意事项
int clientEventHandler::SendData(const char * szMsg)
{
ACE_ASSERT(szMsg);
ACE_Message_Block * mb = NULL;
ACE_OutputCDR cdr(ACE_CDR::MAX_ALIGNMENT+8);
mb = new ACE_Message_Block(cdr.begin()->rd_ptr(),cdr.begin()->total_length());
ACE_ASSERT(mb);
/* mb = new ACE_Message_Block();
ACE_OutputCDR cdr(mb->wr_ptr(),ACE_CDR::MAX_ALIGNMENT+8); *///这种写法测试过是不行的。
int clientEventHandler::SendData(const char * szMsg)
{
ACE_ASSERT(szMsg);
ACE_Message_Block * mb = NULL;
ACE_OutputCDR cdr(ACE_CDR::MAX_ALIGNMENT+8);
mb = new ACE_Message_Block(cdr.begin()->rd_ptr(),cdr.begin()->total_length());
ACE_ASSERT(mb);
/* mb = new ACE_Message_Block();
ACE_OutputCDR cdr(mb->wr_ptr(),ACE_CDR::MAX_ALIGNMENT+8); *///这种写法测试过是不行的。
size_t length1 = cdr.length(); //获取cdr长度;
cdr << ACE_CDR::Char('E');
cdr << ACE_CDR::Long(ACE_OS::strlen(szMsg) + 5) ; // 加上5,因为在使用 cdr << szMsg时,ace 会自己加上4个字节的字符串长度和一个字符串休止符。
cdr << ACE_CDR::Char('E');
cdr << ACE_CDR::Long(ACE_OS::strlen(szMsg) + 5) ; // 加上5,因为在使用 cdr << szMsg时,ace 会自己加上4个字节的字符串长度和一个字符串休止符。
size_t length2 = cdr.length(); //获取发送字符'E',ACE_OS::strlen(szMsg) + 5 后cdr的长度。
mb->wr_ptr(length2 - length1); //总共使用的空间,以字节为单位;
cdr << szMsg; //插入符 << 发送字符串,包括字符串长度和字符串休止符。
size_t length3 = cdr.length();
mb->wr_ptr(length3 - length2 /*ACE_OS::strlen(szMsg) + 5*/);
size_t nSend = sock_.send_n(mb);
mb->release();
return nSend;
mb->wr_ptr(length2 - length1); //总共使用的空间,以字节为单位;
cdr << szMsg; //插入符 << 发送字符串,包括字符串长度和字符串休止符。
size_t length3 = cdr.length();
mb->wr_ptr(length3 - length2 /*ACE_OS::strlen(szMsg) + 5*/);
size_t nSend = sock_.send_n(mb);
mb->release();
return nSend;
}
二 利用 ACE_InputCDR ,ACE_Message_Block 接受数据和注意事项
int clientService::handle_input(ACE_HANDLE h)
{
ACE_Message_Block * mb = new ACE_Message_Block (ACE_DEFAULT_CDR_BUFSIZE);
if(sock_.recv_n(mb->wr_ptr(),8) == 8)
{
mb->wr_ptr(8); //写指针往前移8个字节
ACE_InputCDR cdr(mb); //用 已经更新过 wr_ptr 的 mb 初始化 cdr
ACE_CDR::Char Type;
ACE_CDR::Long Msglength;
cdr >> Type; //读取表达式类型;
cdr >> Msglength; //读取总长度= 4 + 1 + 字符串长度;
mb->release();
二 利用 ACE_InputCDR ,ACE_Message_Block 接受数据和注意事项
int clientService::handle_input(ACE_HANDLE h)
{
ACE_Message_Block * mb = new ACE_Message_Block (ACE_DEFAULT_CDR_BUFSIZE);
if(sock_.recv_n(mb->wr_ptr(),8) == 8)
{
mb->wr_ptr(8); //写指针往前移8个字节
ACE_InputCDR cdr(mb); //用 已经更新过 wr_ptr 的 mb 初始化 cdr
ACE_CDR::Char Type;
ACE_CDR::Long Msglength;
cdr >> Type; //读取表达式类型;
cdr >> Msglength; //读取总长度= 4 + 1 + 字符串长度;
mb->release();
ACE_Message_Block * payload = new ACE_Message_Block (ACE_DEFAULT_CDR_BUFSIZE);
int n = sock_.recv_n(payload->wr_ptr(),Msglength);
if(n /*sock_.recv_n(payload->wr_ptr(),Msglength) */> 0)
{
mb->wr_ptr(n); //mb 的 wr_ptr 一定要先更新;
ACE_InputCDR payloadcdr(mb);//然后初始化ACE_InputCDR
char * pResult = NULL;
payloadcdr >> pResult; //提取符 >> 获取pResult
CCalculate calcul;
calcul.HandleData(pResult);
pResult = calcul.GetCaculResult();
}
int n = sock_.recv_n(payload->wr_ptr(),Msglength);
if(n /*sock_.recv_n(payload->wr_ptr(),Msglength) */> 0)
{
mb->wr_ptr(n); //mb 的 wr_ptr 一定要先更新;
ACE_InputCDR payloadcdr(mb);//然后初始化ACE_InputCDR
char * pResult = NULL;
payloadcdr >> pResult; //提取符 >> 获取pResult
CCalculate calcul;
calcul.HandleData(pResult);
pResult = calcul.GetCaculResult();
}
}
return 0;
}
return 0;
}
0 0
- ACE_OutputCDR,ACE_InputCDR,ACE_Message_Block使用2
- ACE_Mesaage_Block,ACE_InputCdr,ACE_OutputCdr的使用
- ACE_InputCDR和ACE_OutputCDR
- ACE_InputCDR和ACE_OutputCDR
- 关于ACE_InputCDR和ACE_OutputCDR读写数据时的经验
- 关于ACE_InputCDR和ACE_OutputCDR读写数据时的经验
- 关于ACE_InputCDR和ACE_OutputCDR读写数据时的经验
- 关于ACE_InputCDR和ACE_OutputCDR读写数据时的经验
- ACE_Message_Block的使用注意事项
- ACE_Message_Block 简单使用
- ACE_Message_Block类 使用小结
- ACE_Message_Block类 使用小结
- ACE_Message_Block类 使用小结
- ACE_Message_Block
- ACE_Message_Block
- ACE_Message_Block
- ACE_Message_Block
- ACE_Message_Block
- UIBarbutton点击事件问题
- ACCESS网站示例-连载-配置文件
- K&R C与ANSI C的区别
- MAC常用快捷键
- linux"$* "$*" $@ "$@"用法解释
- ACE_OutputCDR,ACE_InputCDR,ACE_Message_Block使用2
- 成员函数指针,动态绑定(vc平台)
- 蓝桥杯特殊回文数
- windows下Markdownpad的简单用法
- java 一点浅薄的东西 分享1
- 机器学习中的数学(3)-模型组合(Model Combining)之Boosting与Gradient Boosting
- linux运行级别
- Python 递归函数选择排序和二分查找
- Linux内核工程导论——网络:Filter(LSF、BPF、eBPF)