找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 4677|回复: 2

服务端发往客户端的报文,客户端为何收不到?

[复制链接]
发表于 2008-5-11 17:21:22 | 显示全部楼层 |阅读模式
  1. 以下内容为程序代码:
  2.   ACE_Message_Block *send_mb = 0;
  3.   //处理数据,并回应数据
  4.   if (ProcessPacket(&msg_blck, send_mb))
  5.   {
  6.   ws.write (*send_mb, send_mb->length());
  7.   }
  8. ////////////////
  9. BOOL Asynch_Receiver::ProcessPacket(ACE_Message_Block *in_mb, ACE_Message_Block *&out_mb)
  10. {
  11. //假定包正确
  12. MsgHead *hd = (MsgHead*)in_mb->rd_ptr();
  13. if(hd->type == MSG_REQUEST)
  14. {
  15.   switch(hd->req_type)
  16.   {
  17.   case REQ_LOGIN:
  18.    {
  19.     ReqLogin *msg = (ReqLogin*)in_mb->rd_ptr();
  20.     ACE_DEBUG ((LM_DEBUG, "user %s logined\n", msg->name));
  21.     AfxMessageBox(msg->name);
  22.     ReplyLogin repy;
  23.     repy.hd.identifier = hd->identifier + 1;
  24.     repy.hd.length = sizeof(ReplyLogin) - sizeof(MsgHead);
  25.     repy.hd.req_type = REPLY_LOGIN;
  26.     repy.hd.retry_times = 999;
  27.     repy.hd.type = MSG_REPLY;
  28.     repy.success = TRUE;
  29.     out_mb = this->aio_->malloc(DEFAULT_MAX_BLOCK_SIZE);
  30.     ACE_ASSERT(out_mb);
  31.     out_mb->socket_handle(this->handle());
  32.     out_mb->remote_ip(this->remote_addr_.get_ip_address());
  33.     out_mb->wr_ptr((char*)&repy);
  34.     out_mb->wr_ptr(sizeof(ReplyLogin));
  35.     out_mb->length(sizeof(ReplyLogin));
  36.     break;
  37.    }
  38.   }
  39.   
  40.   return TRUE;
  41. }
  42. return FALSE;
  43. }
复制代码
 楼主| 发表于 2008-5-11 17:21:32 | 显示全部楼层
出现这个错误的原因可能性有很多的。调试也比较容易。
1、确定是否客户端和服务器无法进行连接,是否有连接存在。
2、是任何数据都收不到,还是你自己定义的数据收不到。
3、使用ethereal进行追踪很方便。
4、MsgHead *hd = (MsgHead*)in_mb->rd_ptr();

if(hd->type == MSG_REQUEST) - 你能保证数据是正确的吗?
 楼主| 发表于 2008-5-11 17:21:43 | 显示全部楼层
验证数据正确性,涉及安全和加密等问题。一般来说,只要符合我们自己设计的规则,就是正确的。
比如头部有标记什么的。
你得先检验是否可以正常连接,发送数据,然后才谈得上正确与否。
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

Archiver|手机版|小黑屋|ACE Developer ( 京ICP备06055248号 )

GMT+8, 2024-11-21 21:16 , Processed in 0.013041 second(s), 5 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表