无法从传输连接中读取数据

本文关键字:读取 数据 连接 传输 | 更新日期: 2023-09-27 18:15:35

我正在使用TcpClient。有时会出现错误:

无法从传输连接读取数据:已存在远程主机强制关闭连接。在System.Net.Sockets.NetworkStream。读取(Byte[] buffer, Int32偏移量)Int32大小)

我试图通过stackoverflow贡献的信息来解决。我添加条件

netStream。CanRead

但没有成功。我做错了什么?这里有一部分代码,谢谢。

try
        {
            if (netStream.CanRead)
            {
                do
                {
                    int bytesRead = netStream.Read(bytes, 0, bytes.Length);
                    bytesReaded += bytesRead;
                    if (bytesRead > 0)
                    {
                        byte[] toList = new byte[bytesRead];
                        Array.Copy(bytes, toList, bytesRead);
                        listBytes.AddRange(toList);
                    }
                }
                while (netStream.DataAvailable);
                if (listBytes.Count > 0)
                    ParseAllBytes();
            }
            else
            {                    
                Close();
            }
        }
        catch (IOException ex)
        {

无法从传输连接中读取数据

问题是在windows防火墙,如果我关闭防火墙工作正常。如果防火墙是打开的,并且我在入站和出站添加了规则,我得到这个异常,见顶部

根据我的经验,这个异常只会在你连接的东西关闭连接时抛出。如果这是在互联网上进行的,那么沿途有许多跃点可能会导致连接中断。如果你确信这不应该发生(也许双方都在你的基础设施中),那么我建议运行wireshark跟踪。在那里,您可以很容易地看到连接正在关闭,如果它正在关闭,谁正在关闭。查找fin标志设置为1的tcp数据包