国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > C# > 正文

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

2020-01-24 03:00:47
字體:
來源:轉載
供稿:網友

.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();
        }
    }
}

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 庆阳市| 平遥县| 哈密市| 建始县| 辽宁省| 黄陵县| 洪江市| 高平市| 定陶县| 惠州市| 兴义市| 哈尔滨市| 揭西县| 灵寿县| 台中市| 库车县| 衡东县| 德州市| 海城市| 武宣县| 突泉县| 平利县| 兖州市| 时尚| 铁岭市| 建昌县| 广灵县| 密山市| 达州市| 德钦县| 甘谷县| 紫阳县| 娄底市| 措勤县| 封开县| 剑川县| 会东县| 黄石市| 东丰县| 仁化县| 迭部县|