C# Socket鏈接超時設置

問題描述:html

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

問題解決:異步

Socket服務器端:函數

clipboard

clipboard[1]

Socket客戶端:線程

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

IAsyncResult.AsyncState 返回一個對象,該對象時啓動異步操做的方法的最後一個參數3d

clipboard[5]

注:code

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

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

參考資料:blog

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

相關文章
相關標籤/搜索