問題描述:html
對於C# Socket沒有超時設置的選項,默認狀況下進行Socket鏈接,返回鏈接失敗須要20-30s時間,嚴重影響用戶體驗服務器
問題解決:異步
Socket服務器端:函數
Socket客戶端:線程
IAsyncResult.AsyncState 返回一個對象,該對象時啓動異步操做的方法的最後一個參數3d
注: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
源程序文件: