多线程 UDP传输速率 实验

该博客分析了在多线程环境下UDP传输中出现的丢包问题,丢包率为50%。作者排除了缓冲区大小和处理时间过长等因素,发现是由于编码循环中的计数器错误导致。此外,博主还探讨了接收端速率严重下滑的原因,发现大量输出会影响接收速率。最后分享了如何通过设置UDP发送和接收缓冲区来优化传输性能。
摘要由CSDN通过智能技术生成

现阶段问题:丢包问题 丢包率达到50%,但是ping的时候反应良好

1. 分析UDP丢包的原因:

1)现象是每隔一个包丢失一个,所以考虑是否是缓冲区的问题
答:用不同数据包大小10、100、500、1500发现都是收一个丢一个,说明缓冲区大小并不是直接因素。因为如果缓冲区大小有影响,那应该是收几个丢一个会变化
2) 调用recvfrom方法接收到数据后,处理数据花费时间太长,再次调用recvfrom,两次调用间隔里,发过来的包可能丢失。
答: 将recvfrom后面的语句精简,还是一样的丢包率,所以感觉后面的语句好像也没有太多的影响
通过将接收到数据存入一个缓冲区,并迅速返回继续recvfrom,排除了这个原因
找到原因:小循环中数目是几,就是隔几个包丢一个包 这个是因为什么呢?
解决:发现是for循环里的问题,每次encode的时候有一个i++,小循环跳出后又空加一个i++,所以出现了每个小循环后必丢包的现象。

2.接收端速率严重下滑的原因确定

1)在发送端速率19M的时候,接收端速率最高只有9M,在本机上实验,发现是每次的输出影响,包数量过多的情况下,会严重影响接收速率。

学到的一些技巧

1.设置UDP的发送和接收缓冲区

在send()的时候,返回的是实际发送出去的字节(同步)或发送到socket缓冲区的字节
(异步);系统默认的状态发送和接收一次为8688字节

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值