You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

TCP客户端在服务端重启后无法正常持续读取数据问题求解

TCP客户端读取异常问题原因分析
  • 未处理超时异常:设置stream.ReadTimeout = 10000;后,如果10秒内没有读取到数据,stream.Read方法会抛出IOException异常,原代码没有做异常捕获逻辑,异常抛出后直接导致程序崩溃。
  • 无连接异常处理逻辑:服务端宕机或重启过程中,客户端新建TcpClient连接会失败抛出异常,原代码没有捕获该类异常也没有重试机制,程序直接终止运行。
  • 读取逻辑适配问题:如果服务端数据发送间隔大于10秒,正常运行状态下也会触发超时异常,导致程序崩溃。
修复逻辑说明

你提到的重连后设置stream.ReadTimeout = 10000的方案可行,补充异常捕获和重连重试逻辑即可达到预期效果,参考修正后的代码如下:

while(true)
{
    try
    {
        Int32 port = Convert.ToInt32(Port);
        TcpClient client = new TcpClient(server, port);
        Byte[] data = new Byte[256];
        NetworkStream stream = client.GetStream();
        // 重连后设置超时时间
        stream.ReadTimeout = 10000;
        String responseData = String.Empty;
        
        Int32 bytes = stream.Read(data, 0, data.Length);
        responseData = System.Text.Encoding.ASCII.GetString(data, 0, bytes);
        Console.WriteLine(responseData);
        
        stream.Close();
        client.Close();
    }
    catch (IOException)
    {
        // 超时异常触发,等待1秒后重试重连
        Thread.Sleep(1000);
        continue;
    }
    catch (SocketException)
    {
        // 连接失败异常触发,等待3秒后重试重连
        Thread.Sleep(3000);
        continue;
    }
}

内容的提问来源于stack exchange,提问作者Alpovo

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.05 02:18:02