C# 網絡連接中異常斷線的處理:ReceiveTimeout, SendTimeout 及 KeepAliveValues(設置心跳)


C# 網絡連接中異常斷線的處理:ReceiveTimeout, SendTimeout 及 KeepAliveValues(設置心跳)

Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.ReceiveTimeout, true);     //必須先啟用接收超時選項,設置接收超時才有用。   

Socket.SetSocketOption(SocketOptionLevel.Socket, SocketOptionName.SendTimeout, true);     //必須先啟用發送超時選項,設置發送超時才有用。        

Socket.ReceiveTimeOut=10000;//毫秒

Socket.SendTimeOut=10000;//毫秒

2、對於長連接

可以通過 Socket 中的心跳檢測機制進行處理.

Socket的底層IO一般通過 WSAIoctl 函數進行設置. C# 中對此函數進行了封裝, 即Socket.IOControl 方法.

publicint IOControl(

    IOControlCode ioControlCode,

    byte[] optionInValue,

    byte[] optionOutValue

)

其中第一個參數為 Socket IO 控制代碼; 第二個參數為傳入參數值, 第三個參數為傳出值.

在Winsock 2 中定義了許多 Socket IO 控制類型 , 其中有一項: KeepAliveValues , 控制 TCP keep-alive 數據包的發送以及發送間隔。默認值為2個小時, 當間隔時間超過這個設定后, socket就會連續發送5次連接信號, 若客戶端無回應, 則此 client socket會斷開.

我們可以如下調整這個間隔時間:

newClient.Client.IOControl(IOControlCode.KeepAliveValues,BitConverter.GetBytes(120), null); // 設置為 2分鍾.

以上即為2種網絡異常連接斷線檢測的方法.

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM