求助,用CAsyncSocket创建套接口,在接收时无法完整接收

cqzj70 2015-05-16 10:12:33
用CAsyncSocket创建套接口,在接收时无法完整接收预计的92个字节,分了三次来接收,但下了断点,但又能完整接收92个字节,考虑到这个情况,我就用sleep函数休眠了200ms,这次增加到了一次能接收67个字节,一次接收25字节,我在增加休眠时间至1000ms就不起任何作用了,我又采用循环接收,但循环一用,整个程序就假死了,求达人解惑
...全文
236 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
xian_wwq 2015-06-24
  • 打赏
  • 举报
回复
这就是俗称的数据“粘包”,因为tcp是基于流的, 可能上层一次发出的数据在下层分几次发出,也可能多次发送的数据一次就能收到。 解决方法不是sleep,而是自定义包格式, 比如 包标识+包长度,收到包先拿到业务数据长度, 然后根据这个长度,循环接收,直到完成为止。
shenyi0106 2015-06-24
  • 打赏
  • 举报
回复
MFC的CAsyncSocket这个类的机制有些问题,大部分应用宁愿选择使用原始API,也不要使用这个类。 循环接收是没问题的,假死的原因多半是因为你没有处理好“预计要接收的数据”。
sdhongjun 2015-06-24
  • 打赏
  • 举报
回复
你设置接收缓冲区大小了没有!
笨笨仔 2015-06-24
  • 打赏
  • 举报
回复
“抓包”查看实际数据包的情况,如果数据包正常就是程序有问题。
fullfree 2015-06-18
  • 打赏
  • 举报
回复
听起来你像是用的tcp,tcp是无边界协议,你要自己处理消息边界问题。 这里不太会有人给你讲解完整的协议概念,基本概念还是多靠自己吧
cchvsgame 2015-06-18
  • 打赏
  • 举报
回复
正常,应该加个协议,来解析包

18,356

社区成员

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

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