在某些計算機上我有當UdpClient.Close()太快一個UdpClient.Send後()稱爲UdpClient將不發送數據的奇效。 我使用.NET 4.0和Wireshark來驗證數據包丟失。C#:打電話時UdpClient不發送數據close()來很快
編碼的基本組成部分是:
UdpClient sender = new UdpClient();
sender.Connect(new IPEndPoint(this.ipAddress, this.Port));
int bytesSent = sender.Send(data, data.Length);
sender.Close();
Weired是:
- 在大多數計算機上的數據不會有任何問題發送
- 沒有異常或其他錯誤,即使沒有數據包被髮送
- bytesSent永遠等於data.Length
- 在電腦不發送在調用sender.Close()之前將數據包調入Thread.Sleep(250)將解決問題!
那麼,甚至在UdpClient.Send()報告了正確的字節數之後,什麼可以取消發送數據包呢?爲什麼這隻能在某些機器上顯示?這可能是一些網絡驅動程序,防病毒軟件或類似的行爲?
我也試圖明確設置LingerOptions這應該是不必要的作爲默認是關閉底層套接字之前發送所有待處理的數據。然而,做一個sender.Client.LingerState =新LingerOption時(真,10)(如http://msdn.microsoft.com/en-us/library/system.net.sockets.socket.lingerstate.aspx descibed)我得到
SocketException (0x80004005): An unknown, invalid, or unsupported option
or level was specified in a getsockopt or setsockopt call.
任何想法是怎麼回事?
問候, 七