贝贝花花包包店,精品555皮具,钱夹,皮夹

字体:  

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

peakzhang 发表于: 2008-5-11 17:21 来源: ACE 开发者

CODE:

以下内容为程序代码:


  ACE_Message_Block *send_mb = 0;
  //处理数据,并回应数据
  if (ProcessPacket(&msg_blck, send_mb))
  {
  ws.write (*send_mb, send_mb->length());
  }
////////////////
BOOL Asynch_Receiver::ProcessPacket(ACE_Message_Block *in_mb, ACE_Message_Block *&out_mb)
{
//假定包正确
MsgHead *hd = (MsgHead*)in_mb->rd_ptr();

if(hd->type == MSG_REQUEST)
{
  switch(hd->req_type)
  {
  case REQ_LOGIN:
   {
    ReqLogin *msg = (ReqLogin*)in_mb->rd_ptr();
    ACE_DEBUG ((LM_DEBUG, "user %s logined\n", msg->name));
    AfxMessageBox(msg->name);
    ReplyLogin repy;
    repy.hd.identifier = hd->identifier + 1;
    repy.hd.length = sizeof(ReplyLogin) - sizeof(MsgHead);
    repy.hd.req_type = REPLY_LOGIN;
    repy.hd.retry_times = 999;
    repy.hd.type = MSG_REPLY;
    repy.success = TRUE;
    out_mb = this->aio_->malloc(DEFAULT_MAX_BLOCK_SIZE);
    ACE_ASSERT(out_mb);
    out_mb->socket_handle(this->handle());
    out_mb->remote_ip(this->remote_addr_.get_ip_address());
    out_mb->wr_ptr((char*)&repy);
    out_mb->wr_ptr(sizeof(ReplyLogin));
    out_mb->length(sizeof(ReplyLogin));
    break;
   }
  }
  
  return TRUE;
}

return FALSE;
}

最新回复

peakzhang at 2008-5-11 17:21:32
出现这个错误的原因可能性有很多的。调试也比较容易。
1、确定是否客户端和服务器无法进行连接,是否有连接存在。
2、是任何数据都收不到,还是你自己定义的数据收不到。
3、使用ethereal进行追踪很方便。
4、MsgHead *hd = (MsgHead*)in_mb->rd_ptr();

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