0

我正在使用 TcpClient。有时会报错:

无法从传输连接读取数据:现有连接被远程主机强行关闭。在 System.Net.Sockets.NetworkStream.Read(字节 [] 缓冲区,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)
        {
4

2 回答 2

1

问题出在 Windows 防火墙中,如果我关闭防火墙工作正常。如果防火墙已打开并且我将规则添加到入站和出站,我会收到此异常,请参见顶部。

于 2013-06-20T07:24:50.920 回答
0

根据我的经验,仅当您连接的对象关闭连接时才会引发此异常。如果这是通过互联网,则沿途有许多跃点可能导致连接断开。如果您确信这不应该发生(也许双方都在您的基础设施中),那么我建议您运行一个wireshark 跟踪。在那里,您将很容易看到正在关闭的连接以及正在关闭的连接。查找 fin 标志设置为 1 的 tcp 数据包。

于 2013-05-27T09:48:16.987 回答