程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 更多編程語言 >> 更多關於編程 >> 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();         }     } }
    1. 上一頁:
    2. 下一頁:
    Copyright © 程式師世界 All Rights Reserved