C#Socket开发“网络连接超时设置Timeout”,解决网络连接速度过慢的问题

本文介绍了在C#中解决Socket连接超时的问题,通过使用ManualResetEvent实现连接超时控制,避免在服务器网络异常时客户端长时间等待。文章提供了具体的代码示例,展示了如何设置5秒的连接超时,并强调了仅凭Socket.Connected属性无法确保连接可靠性,建议通过信息交互验证连接状态。
摘要由CSDN通过智能技术生成

      近日,在进行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>
        /// 开始连接的方法
       

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值