UDP 协议 C# UdpClient乱序接收数据包丢失的问题 Socket ReceiveBufferSize
Posted CSharp编程大全
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UDP 协议 C# UdpClient乱序接收数据包丢失的问题 Socket ReceiveBufferSize相关的知识,希望对你有一定的参考价值。
一、UDP 协议 C# UdpClient乱序接收数据包丢失的问题 Socket ReceiveBufferSize
利用UdpClient收发文件,走Udp协议,发送端只管发送数据包,接收端负责接收数据,测试中发现,按每块1298字节发送数据包时,接收端在接收共8块时出现了部分数据包的丢失,分析可能是数据突然集中到达超出Socket接收缓冲区大小,造成数据覆盖丢失,因为默认Socket缓冲区大小为8192字节,每块数据1298字节再加上我在实验程序中自定义的数据包头信息,每块数据大小在1472字节,8块共计11776字节,远超出了8192,会造成数据丢失。接收端在乱序接收文件过程中,对突然集中到达的数据包处理不及时,造成缓冲区大小不够存储这些数据包,发生数据包的丢失,因而【如果要传送大文件,或在使用高带宽或高滞后时间连接(如卫星宽带提供程序),请考虑增加缓冲区的大小】。针对UdpClient,我们需要用到Socket 的ReceiveBufferSize 属性,添加如下代码:
UdpClient uc = new UdpClient(7376);//创建一个UdpClient实例,监听绑定了端口7376的接口
uc.Client.ReceiveBufferSize = 1024 * 1024;//这里大小(以字节为单位)根据需要修改,默认值是8192
以上是关于UDP 协议 C# UdpClient乱序接收数据包丢失的问题 Socket ReceiveBufferSize的主要内容,如果未能解决你的问题,请参考以下文章