近日,在进行PPC下的网络通讯程序开发时,当服务器的网络中断或连接异常时,客户端在进行TCP连接请求时“Socket.Connect()”速度明显过慢,通常20-30S才能有异常返回。.Net的System.Net.Sockets.TcpClient和System.Net.Sockets.Socket都没有直接为Connect/BeginConnect提供超时控制机制。因此,当服务器未处于监听状态,或者发生网络故障时,客户端连接请求会被迫等待很长一段时间,直到抛出异常。为解决这一问题,我查阅了部分资料同时进行了测试,现将解决方法整理如下:
1、部分代码段:
private ManualResetEvent connectDone = new ManualResetEvent(false);
private void ConnectCallback(IAsyncResult ar)
{
try
{
Socket client = (Socket) ar.AsyncState;
client.EndConnect(ar);
}
catch (Exception e)
{
OnErrorEvent(new ErrorEventArgs(e));
}
finally
{
connectDone.Set();
}
}
/// <summary>
/// 开始连接的方法