请教UDP快速接收数据丢包的问题

cqcrr 2012-07-04 10:34:40
发送端以每秒3000个包的速度发送UDP包,一个包的大小为1000字节,PC端使用SOCKET的recvfrom函数接收数据,接到数据后使用memcpy copy到另一个1M byte的缓冲区,但是丢包很严重。求指点!
网上有人提出把接收缓冲设置大,但将Socket接收缓冲区设置大一些没有提高性能,我想缓冲再大每次不就是只能收一个UDP包么?
不过使用Iris,Winnetcap这类的软件都是看得到实际的流量就接近3000*1000/s,这是否意味着软件是可以抓到每一个包的?只是简单的使用recvfrom不停的接收是不行的?还有其他的好方法?
谢谢!
...全文
1012 13 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzl_19101053 2013-04-07
  • 打赏
  • 举报
回复 1
接收端两个线程 一个线程不停的recvfrom,把收到的包放入一个队列,另一个线程处理队列中已经接收的包。定期发送延迟
Squall_zy 2013-03-30
  • 打赏
  • 举报
回复
简单看了一下,应该是收端的问题。 1、一秒3000个包,非常少。无论发或是收,都可轻松完成。 2、丢包的原因有可能是“接收缓冲区太小”,你可以设成5M,再试试。 3、上面2条建议有个前提,你的程序要足够合理。如果是因为你来不及把缓冲区内的数据取走,那就没办法了。目测如果接收端使用基于消息通告的IO方式,有点吃力。
wwwhhb4002 2013-03-29
  • 打赏
  • 举报
回复
学习一下,这个问题很重要
wyx100 2013-03-28
  • 打赏
  • 举报
回复
接收端两个线程 一个线程不停的recvfrom,把收到的包放入一个队列 另一个线程处理队列中已经接收的包。
且行且探索 2013-03-28
  • 打赏
  • 举报
回复
while(m_bRun) { CUtil::My_Sleep(5); while(true) { FD_ZERO(&m_ReadFD); FD_SET(m_hRecvSocket, &m_ReadFD); int nRetCode = select(m_hRecvSocket+1, &m_ReadFD, NULL, NULL, &m_TimeOut); if(nRetCode<=0) { break; } if(!RecvData()) break; } } 这样是不会逻辑丢包的
smallhappiness 2013-03-23
  • 打赏
  • 举报
回复
你可以把1M缓冲区作为recvfrom的入参,然后移动指针呢。另一个线程从这个缓冲区考走数据。 另外发送端机器和接收端机器配置差不多么?如果发送端机器比接收端更强劲,可能下级接受处理就慢些,导致淹没丢包。
UDX协议 2012-11-30
  • 打赏
  • 举报
回复
可以了解UDX协议,跨平台,安全可靠,高效的UDP. 3000*1000字节,也就3M/秒的数据量,UDX在100Mb网,轻松到11MB/秒。
lijiangtao23 2012-11-30
  • 打赏
  • 举报
回复
我遇到了这样的问题了,同一台电脑上,一个进程发送,一个进程接收,通过测试验证,发送端发送的相当快,接收端接收得就比较慢了,猜测是:造成接收端的系统接收缓冲区里的数据被覆盖,所以数据接收不完整了
bluesen 2012-07-05
  • 打赏
  • 举报
回复
2楼的接近正解。正解是一个线程接收数据放到队列,而多个线程处理队列。
你怎么知道丢包?应该是你处理包不够快
cqcrr 2012-07-05
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]
你没有在发送端检查 sendto的返回值吧
初次写UDP传输的人很容易犯这个错误的
如果发送缓冲满了,直接就返回错误
这个时候要使用Sleep( )或者select函数等待SOCKET缓冲可写
[/Quote]
但是请问为什么Winnetcap这类的软件都是看得到实际的流量就接近3000*1000/s?
danscort2000 2012-07-05
  • 打赏
  • 举报
回复
你没有在发送端检查 sendto的返回值吧
初次写UDP传输的人很容易犯这个错误的
如果发送缓冲满了,直接就返回错误
这个时候要使用Sleep( )或者select函数等待SOCKET缓冲可写

Tishion 2012-07-04
  • 打赏
  • 举报
回复
接收端两个线程
一个线程不停的recvfrom,把收到的包放入一个队列
另一个线程处理队列中已经接收的包。
cqcrr 2012-07-04
  • 打赏
  • 举报
回复
补充一下,我是2台机子直接网线连接。所以网络丢包的可能性很小

18,363

社区成员

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

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