源码网商城,靠谱的源码在线交易网站 我的订单 购物车 帮助

源码网商城

C# Socket连接请求超时机制实现代码分享

  • 时间:2022-10-21 20:16 编辑: 来源: 阅读:
  • 扫一扫,手机访问
摘要:C# Socket连接请求超时机制实现代码分享
.Net的System.Net.Sockets.TcpClient和System.Net.Sockets.Socket都没有直接为Connect/BeginConnect提供超时控制机制。因此,当服务器未处于监听状态,或者发生网络故障时,客户端连接请求会被迫等待很长一段时间,直到抛出异常。默认的等待时间长达20~30s。.Net Socket库的SocketOptionName.SendTimeout提供了控制发送数据的超时时间,但并非本文讨论的连接请求的超时时间。 实现 下面是实现的关键代码:
[u]复制代码[/u] 代码如下:
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();         }     } }
  • 全部评论(0)
联系客服
客服电话:
400-000-3129
微信版

扫一扫进微信版
返回顶部