C# Socket連接超時設置


問題描述:

        對於C# Socket沒有超時設置的選項,默認情況下進行Socket連接,返回連接失敗需要20-30s時間,嚴重影響用戶體驗

問題解決:

Socket服務器端:

clipboard

clipboard[1]

Socket客戶端:

clipboard[2]clipboard[3]clipboard[4]

IAsyncResult.AsyncState 返回一個對象,該對象時啟動異步操作的方法的最后一個參數

clipboard[5]

注:

    在Socket客戶端進行超時連接的設置,異步連接,設置連接處理的回調函數,以及超時的處理。

ManualResetEvent的WaitOne(TimeSpan, Boolean)起到了主要的作用。它將阻止當前線程,直到ManualResetEvent對象被Set或者超過timeout時間。上面的代碼中,調用BeginConnect后通過WaitOne方法阻止當前線程,如果在timeoutMSec時間內連接成功,將在CallBackMethod回調中調用TimeoutObject.Set,解除被阻塞的連接線程並返回;否則,連接線程會在等待超時后,主動關閉連接並拋出TimeoutException。

參考資料:

http://www.cnblogs.com/weidagang2046/archive/2009/02/07/1385977.html

http://www.codeproject.com/Articles/31514/Implementation-of-Connecting-a-Socket-with-Timeout

   http://msdn.microsoft.com/zh-cn/library/system.threading.manualresetevent(v=vs.95).aspx

C# Socket異步通信:

http://www.cnblogs.com/llllll/archive/2009/05/13/1455703.html

http://www.cnblogs.com/sunev/archive/2012/08/07/2625688.html

源程序文件:

Server.csClient.cs


免責聲明!

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



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