手机
当前位置:查字典教程网 >编程开发 >C#教程 >C# Socket连接请求超时机制实现代码分享
C# Socket连接请求超时机制实现代码分享
摘要:.Net的System.Net.Sockets.TcpClient和System.Net.Sockets.Socket都没有直接为Conne...

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

}

}

}

【C# Socket连接请求超时机制实现代码分享】相关文章:

C#版ftp方法实现类的代码

C# 透明窗体制作实现方法比较分析

C#常用正则大全分享

解析c#显示友好时间的实现代码

C# 创建文本文件写入读取实现代码

List转换成DataSet实现代码

c#图片添加水印的实例代码

C# 游戏外挂实现核心代码

C#重启远程计算机的代码

C#解析json文件的实现代码

精品推荐
分类导航