找回密码
 用户注册

QQ登录

只需一步,快速开始

查看: 3526|回复: 3

handle_read_stream的问题

[复制链接]
发表于 2007-12-22 22:20:38 | 显示全部楼层 |阅读模式
  1. void Receiver::handle_read_stream(const ACE_Asynch_Read_Stream::Result &result)
  2. {
  3.     if (!result.success()||result.bytes_transferred()==0)
  4.     {
  5. cout<<"delete ..."<<endl;
  6. delete this;
  7. return ;
  8.     }
  9.    //ProactorTPSingleton::instance()->putq(&result.message_block());
  10. //ACE_OS::printf("%d:putq\n",global++);
  11.    else if (mblk_->length() == SIZE_TO_READ)//获得需要接收的字节数
  12.    {
  13. cout<<"sizetoread == "<<SIZE_TO_READ<<endl;
  14. cout<<"data is..."<<mblk_->rd_ptr()<<endl;
  15. cout<<"trasfered "<<result.bytes_transferred()<<endl;
  16.         /* ACE_InputCDR cdr (mblk_); 参照C++NP2上的例子没得到正确结果
  17.        ACE_CDR::Boolean byte_order;
  18.        cdr >> ACE_InputCDR::to_boolean (byte_order);
  19.        cdr.reset_byte_order (byte_order);
  20.        ACE_CDR::ULong length;
  21. cdr >> length;
  22. cout<<"need read :"<<length<<endl;*/
  23. char *len = mblk_->rd_ptr();
  24.   u_long length = atoi(len);
  25. cout<<"need read :"<<length<<endl;
  26.        mblk_->size(length+SIZE_TO_READ);//扩大容量,接收数据
  27.        rs_.read(*mblk_,length);//投递读
  28.    }
  29.     else//问题出在这,执行上面的else if时,这个else语句块也执行!!!不解
  30.     {
  31. cout<<"recv data..."<<mblk_->rd_ptr()<< endl;
  32. ProactorTPSingleton::instance()->putq(mblk_);
  33. ACE_NEW(mblk_,ACE_Message_Block(SIZE_TO_READ));
  34. //ACE_CDR::mb_align (mblk_);
  35. rs_.read(*mblk_,SIZE_TO_READ);
  36. cout<<" another read ..."<<endl;
  37.     }
  38. };
复制代码
 楼主| 发表于 2007-12-22 22:20:49 | 显示全部楼层
客户端发测试数据:

  char buf[]="1111";
     
  peer.send(buf,sizeof buf)

可以发现,else if语句块,和最后的else语句块都执行了,感觉很奇怪,只发了一次数据,读取完后,应该只执行一次,handle_read_stream ,但结果好像时执行了2次,为什么?
 楼主| 发表于 2007-12-22 22:20:56 | 显示全部楼层
你这里没有处理“短读”的问题,就是实际收取的数据长度,小于你要求的数据长度。
}else if(result.bytes_transferred() < result.bytes_to_read())
{

}
 楼主| 发表于 2007-12-22 22:21:06 | 显示全部楼层
基本上就是你说的问题
您需要登录后才可以回帖 登录 | 用户注册

本版积分规则

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

GMT+8, 2024-12-22 21:38 , Processed in 0.017861 second(s), 7 queries , Redis On.

Powered by Discuz! X3.5

© 2001-2023 Discuz! Team.

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