若是須要查看更多文章,請微信搜索公衆號 csharp編程大全,須要進C#交流羣羣請加微信z438679770,備註進羣, 我邀請你進羣! ! !編程
1、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搜索