最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

C# Socket連接請求超時機制實現(xiàn)代碼分享

 更新時間:2013年12月09日 11:12:44   投稿:zxhpj  
這篇文章主要介紹了C# Socket連接請求超時機制實現(xiàn),下面提供代碼分享,大家可以參考使用

.Net的System.Net.Sockets.TcpClient和System.Net.Sockets.Socket都沒有直接為Connect/BeginConnect提供超時控制機制。因此,或者發(fā)生網(wǎng)絡(luò)故障時,客戶端連接請求會等待很長一段時間,直到拋出異常。默認的等待時間長達20~30s。.Net Socket庫的SocketOptionName.SendTimeout提供了控制發(fā)送數(shù)據(jù)的超時時間,但并非本文討論的連接請求的超時時間。
實現(xiàn)

下面是實現(xiàn)的關(guān)鍵代碼:

復制代碼 代碼如下:

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

相關(guān)文章

  • C#生成不重復隨機字符串類

    C#生成不重復隨機字符串類

    這篇文章主要介紹了C#生成不重復隨機字符串類,涉及C#隨機數(shù)與字符串的操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-03-03
  • 深入解析C#設(shè)計模式編程中對建造者模式的運用

    深入解析C#設(shè)計模式編程中對建造者模式的運用

    這篇文章主要介紹了C#設(shè)計模式編程中對建造者模式的運用,文中還介紹了在.NET框架下建造者模式編寫思路的實現(xiàn),需要的朋友可以參考下
    2016-02-02
  • C#從XmlDocument提取完整字符串的方法

    C#從XmlDocument提取完整字符串的方法

    文章介紹了兩種生成格式化XML字符串的方法,方法一使用`XmlDocument`的`OuterXml`屬性,但輸出的XML字符串不帶格式,可讀性差,方法二利用`XmlWriterSettings`控制格式,并通過`MemoryStream`作為輸出流,可以自定義編碼,如UTF-8,感興趣的朋友跟隨小編一起看看吧
    2025-02-02
  • 在.NET項目中嵌入Python代碼的實踐指南

    在.NET項目中嵌入Python代碼的實踐指南

    在現(xiàn)代開發(fā)中,.NET 與 Python 的協(xié)作需求日益增長,從機器學習模型集成到科學計算,從腳本自動化到數(shù)據(jù)分析,然而,傳統(tǒng)的解決方案(如 HTTP API 或進程間通信)往往帶來性能損耗和復雜架構(gòu),所以本文給大家介紹了在.NET項目中嵌入Python代碼的方法,需要的朋友可以參考下
    2025-08-08
  • winform實現(xiàn)拖動文件到窗體上的方法

    winform實現(xiàn)拖動文件到窗體上的方法

    這篇文章主要介紹了winform實現(xiàn)拖動文件到窗體上的方法,以實例分析了C#中WinForm操作窗體及文件的相關(guān)技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2015-09-09
  • c#動態(tài)調(diào)用Webservice的兩種方法實例

    c#動態(tài)調(diào)用Webservice的兩種方法實例

    這篇文章介紹了c#動態(tài)調(diào)用Webservice的兩種方法實例,有需要的朋友可以參考一下
    2013-08-08
  • C#編程實現(xiàn)動態(tài)改變配置文件信息的方法

    C#編程實現(xiàn)動態(tài)改變配置文件信息的方法

    這篇文章主要介紹了C#編程實現(xiàn)動態(tài)改變配置文件信息的方法,涉及C#針對xml格式文件的相關(guān)操作技巧,具有一定參考借鑒價值,需要的朋友可以參考下
    2016-06-06
  • 詳解Winform里面的緩存使用

    詳解Winform里面的緩存使用

    這篇文章主要介紹了Winform里面的緩存使用,有需要的朋友可以參考一下
    2014-01-01
  • C# memcached緩存使用實例代碼

    C# memcached緩存使用實例代碼

    這篇文章主要介紹了C# memcached緩存使用實例,大家參考使用
    2013-12-12
  • C#開發(fā)中常用的加密解密方法匯總

    C#開發(fā)中常用的加密解密方法匯總

    這篇文章主要介紹了C#開發(fā)中常用的加密解密方法匯總,幫助大家更好的理解和使用c#,感興趣的朋友可以了解下
    2020-11-11

最新評論

孟津县| 崇州市| 庄浪县| 铅山县| 江安县| 固镇县| 胶州市| 桂阳县| 渝中区| 伊宁县| 南召县| 双鸭山市| 屏南县| 祁门县| 石台县| 西华县| 都昌县| 明光市| 新巴尔虎右旗| 陈巴尔虎旗| 通化市| 基隆市| 西贡区| 大余县| 阿尔山市| 正宁县| 大埔县| 定州市| 濮阳县| 邮箱| 沙洋县| 都安| 扬州市| 团风县| 册亨县| 邢台县| 东明县| 根河市| 土默特左旗| 延川县| 财经|