关于CAsyncSocket:OnReceive()函数

jglxgz 2005-03-24 04:38:26
1.若在OnReceive()函数中处理比较费时,不能及时返回,会不会造成数据包丢失?

2.另外,若OnReceive()函数没有处理完,这时又有数据包到达,会不会又触发OnReceive()函数,也就是说OnReceive()函数能否并行运行,同时处理多个数据包?

3.CAsyncSocket会不会把收到的数据包存在一个队列里,等待OnReceive()函数慢慢处理,也就是OnReceive()函数处理一个包,CAsyncSocket再次触发OnReceive()函数处理下一个包?

欢迎大家讨论!
...全文
1173 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
smallcrocodile 2005-03-25
  • 打赏
  • 举报
回复
研究
nooning 2005-03-24
  • 打赏
  • 举报
回复
UDP 最好注意一下丢包,超出缓冲就会丢
TCP会有连接控制.UDP是没有的,要么自己加些连接控制
jglxgz 2005-03-24
  • 打赏
  • 举报
回复
我用的就是UDP啊
nooning 2005-03-24
  • 打赏
  • 举报
回复
CAsyncSocket会帮你处理消息,你只要选择关心的网络事件,你可以通过设置来改变缓冲区大小,能存多少包很难说,这是一个变数和你的包大小和缓冲区大小有关.
只要知道TCP是不会丢包的,UDP会
jglxgz 2005-03-24
  • 打赏
  • 举报
回复
也就是说不需自己开消息队列了,那CAsyncSocket缓冲区一般能存多少数据包了,一个包一K吧
nooning 2005-03-24
  • 打赏
  • 举报
回复
简单的理解可以是这样的 只有onrecevie返回了,才会处理下一个事件,不仅仅是onrecevie,只要在处理任何一个事件,其它的事件虽然有可能已经发生,但要待完成后才会处理,是一个先进先出的消息队列
jglxgz 2005-03-24
  • 打赏
  • 举报
回复
这种理解对吗?
CAsyncSocket会把收到的数据包存在一个队列里,等待OnReceive()函数慢慢处理,也就是OnReceive()函数处理一个包,CAsyncSocket再次触发OnReceive()函数处理下一个包。
nooning 2005-03-24
  • 打赏
  • 举报
回复
要并行处理在OnReceive中新建线程处理数据
nooning 2005-03-24
  • 打赏
  • 举报
回复
不行
jglxgz 2005-03-24
  • 打赏
  • 举报
回复
OnReceive()函数能否并行运行?
oyljerry 2005-03-24
  • 打赏
  • 举报
回复
1,会造成数据包的积压
2,会触发
3,基于消息触发
modena 2005-03-24
  • 打赏
  • 举报
回复
CAsyncSocket客户端本身有缓冲区处理,不过仍然建议建立自己的缓冲区队列,所有到来的数据报文送入队列,并创建单独的队列循环处理投递在队列中尚未处理的报文
DentistryDoctor 2005-03-24
  • 打赏
  • 举报
回复
CAsyncSocket的IO操作实现是同步的,是基于消息机制的。
nuaawenlin 2005-03-24
  • 打赏
  • 举报
回复
1,数据积压超过缓冲区,则丢失
2,会触发,所以要处理好同步问题。它不能处理并行
3,只要有数据到达就触发
nooning 2005-03-24
  • 打赏
  • 举报
回复
CAsyncSocket由消息机制驱动,只有一个线程在运行,所以会出现阻塞,也就是和楼主说的第三种情况那样,出现下一个数据包的事件会在消息队列中.不会出现丢包,至于如果有大量数据积压,超出缓冲区的大小时,对TCP来速度将减慢,不会丢包,如果UDP就会丢包了.....
fisker0303 2005-03-24
  • 打赏
  • 举报
回复
OnReceive是一步,就象楼主想的那样运作。

但如果处理的数据大或频繁,建议还是自己来封装一个类。

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧