UDP 遠程主機強迫關閉了一個現有的連接。
一直郁悶 UDP不是面向非連接的??
在UDP通信過程中,如果客戶端中途斷開,服務器會收到一個SocketException,錯誤ID為10054,描述是“遠程主機強迫關閉了一個現有的連接”,緊接着的事就可怕了,UDP服務終止監聽,所有客戶端都受到了影響。也就是說一個客戶端引起的異常導致了整個系統的崩潰。
找了好幾天了。終於找到了解決辦法。
在初始化對象后設置屬性如下:
uint IOC_IN = 0x80000000;
uint IOC_VENDOR = 0x18000000;
uint SIO_UDP_CONNRESET = IOC_IN | IOC_VENDOR | 12;
ClientSocket.IOControl((int)SIO_UDP_CONNRESET, new byte[] {Convert.ToByte(false)}, null);
Socket.IOControl 方法 (IOControlCode, Byte[], Byte[])
使用 IOControlCode 枚舉指定控制代碼,為 Socket 設置低級操作模式。
參數
- ioControlCode
-
一個 IOControlCode 值,它指定要執行的操作的控制代碼。
- optionInValue
-
Byte 類型的數組,包含操作要求的輸入數據。
- optionOutValue
-
Byte 類型的數組,包含由操作返回的輸出數據。
返回值
optionOutValue 參數中的字節數。

異常類型 | 條件 |
---|---|
試圖訪問套接字時發生錯誤。有關更多信息,請參見備注部分。 |
|
Socket 已關閉。 |
|
試圖不使用 Blocking 屬性更改阻止模式。 |