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