完成端口接受数据丢失

myfriend023 2011-05-28 09:27:25
最近我用iocp写了一个客户端,发现有接收数据的时候有数据丢失,我在GetQueuedCompletionStatus 获取完成结果时候,
吧获取的数据用2进制写入文本,然后服务器发送数据时候也写入文本同样采用2进制方式写入,得到两个2进制文件,通过对比文件工具比较,反省客户端的2进制和服务端的2进制数据有丢失,不知道什么原因,
在次提交几个问题
1,此时如果一个客户端不断发送数据,究竟是一个线程在从完成端口读呢,还是几个线程都在读?对于单cpu的和多cpu的情况是否有所不同?
2,如果,此时是几个客户端同时发送数据,会不会出现“线程A读到client1的2k数据,然后读client2的,线程B读到client1的后2k数据,然后读client2的”这种情况。

备注:
单数据量比较小的情况下,没有发送数据丢失,如果服务端发送的数据量比较大的时候,有数据丢失的情况
如果解决iocp里面数据丢失的问题,大火有没有碰到类似的问题,你们是怎么解决的
...全文
137 5 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
LBJAMS 2013-08-13
  • 打赏
  • 举报
回复
有没有大虾能解决这个问题?我也遇到了,不知道怎么解决!
npwd 2011-05-28
  • 打赏
  • 举报
回复
我也碰到这个问题,有数据丢失,很无赖不知道为什么
nodiebirdcomeback 2011-05-28
  • 打赏
  • 举报
回复
没见过丢数据的情况,因为TCP/IP本身就是流协议,正常通信根本不可能存在丢数据的问题,但是会出现
捻包和断包的现象。
kyotrue 2011-05-28
  • 打赏
  • 举报
回复
1、完成端口是一个I/O操作完成时,从线程池中取一个线程运行,在这个线程里面进行读操作,多个同时完成就是多个线程一起读,但不会读同一个I/O的数据。从编程模型上说,单cpu的和多cpu没有区别。
2、线程A读到client1的2k数据,然后读client2的,只要client1的2k数据是读完了的,回调函数返回了的,那么就是正常的。
npwd 2011-05-28
  • 打赏
  • 举报
回复
学习中。。

18,363

社区成员

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

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