udp下iocp应用,收到的包总是少于发送的

nowordwind 2010-07-23 10:47:08
客户端与服务端都使用IOCP机制,客户端一次性发送出3000个包,每个包大小为30字节左右,而服务端最终收到的包数,总是少于3000;如果客户端一次性发送100个包左右,确能接收完全,具体是啥原因呢。我的服务端,是每接收到一个包后,就接着投递一个读请求。急,在线等待。
...全文
113 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
周药师 2010-07-23
  • 打赏
  • 举报
回复
可以用抓包工具看看
首先检查是否已经发出3000个包
然后检查接收端逻辑是否有问题
玉古云投 2010-07-23
  • 打赏
  • 举报
回复
你的接收端有没有用接收处理线程,不是完成端口工作线程
UDP本来就是非可靠的,发送端发送出去的数据包,接收端不一定能收到
jasonM2008 2010-07-23
  • 打赏
  • 举报
回复
IOCP 很复杂,你可能对其没有完全理解。代码问题导致的。
zmshy2128 2010-07-23
  • 打赏
  • 举报
回复
接收端增加缓冲,windows默认情形下是8k,LZ的3000*30远大于8k,使用setsockopt函数,


接收端缓冲有限,还没取完数据,缓冲就覆盖了,当然就接收不到
nowordwind 2010-07-23
  • 打赏
  • 举报
回复
我是本机测试,并未通过网络。

已用抓包工具看过了。客户端确实是发送了3000个包。不多不少,如果说接收端逻辑有问题,我也在郁闷呢,到底是哪里呢?我是接收到后,立马投递了一个读的请求。并没有少投递啊。为什么就叫的不对呢????

数据发送的速度远大于接收的速度。可是我才仅仅发了3000个包。不可能这么快就处理不过来了吧。
zmshy2128 2010-07-23
  • 打赏
  • 举报
回复
晕死,是远大于8k
zmshy2128 2010-07-23
  • 打赏
  • 举报
回复
不是IOCP的原因,在网络传输中,数据发送的速度远大于数据接收的数据。
解决方法:
1、优化接收端的代码性能
2、接收端增加缓冲,windows默认情形下是8k,LZ的3000*30正好大于8k,使用setsockopt函数,
3、发送端控制发送数据的速度。

如果还是不行,那就换网线、路由器等硬件设备吧

18,363

社区成员

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

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