萬盛學電腦網

 萬盛學電腦網 >> 網絡編程 >> 編程語言綜合 >> C# Socket連接請求超時機制實現代碼分享

C# Socket連接請求超時機制實現代碼分享

 這篇文章主要介紹了C# Socket連接請求超時機制實現,下面提供代碼分享,大家可以參考使用

.Net的System.Net.Sockets.TcpClient和System.Net.Sockets.Socket都沒有直接為Connect/BeginConnect提供超時控制機制。因此,當服務器未處於監聽狀態,或者發生網絡故障時,客戶端連接請求會被迫等待很長一段時間,直到拋出異常。默認的等待時間長達20~30s。.Net Socket庫的SocketOptionName.SendTimeout提供了控制發送數據的超時時間,但並非本文討論的連接請求的超時時間。 實現   下面是實現的關鍵代碼:   代碼如下: class TimeOutSocket {     private static bool IsConnectionSuccessful = false;     private static Exception socketexception;     private static ManualResetEvent TimeoutObject = new ManualResetEvent(false);       public static TcpClient TryConnect(IPEndPoint remoteEndPoint, int timeoutMiliSecond)     {         TimeoutObject.Reset();         socketexception = null;             string serverip = Convert.ToString(remoteEndPoint.Address);         int serverport = remoteEndPoint.Port;                    TcpClient tcpclient = new TcpClient();           tcpclient.BeginConnect(serverip, serverport,              new AsyncCallback(CallBackMethod), tcpclient);           if (TimeoutObject.WaitOne(timeoutMiliSecond, false))         {             if (IsConnectionSuccessful)             {                 return tcpclient;             }             else             {                 throw socketexception;             }         }         else         {             tcpclient.Close();             throw new TimeoutException("TimeOut Exception");         }     }     private static void CallBackMethod(IAsyncResult asyncresult)     {         try         {             IsConnectionSuccessful = false;             TcpClient tcpclient = asyncresult.AsyncState as TcpClient;               if (tcpclient.Client != null)             {                 tcpclient.EndConnect(asyncresult);                 IsConnectionSuccessful = true;             }         }         catch (Exception ex)         {             IsConnectionSuccessful = false;             socketexception = ex;         }         finally         {             TimeoutObject.Set();         }     } }
copyright © 萬盛學電腦網 all rights reserved