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

时间:2013-05-27 09:25:24

标签: c# connection tcpclient netstream

我正在使用TcpClient。有时会收到错误:

  

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

2 个答案:

答案 0 :(得分:1)

问题出在Windows防火墙中,如果我关闭防火墙工作完美。如果打开防火墙并且我将规则添加到inbouds和outbounds,我会收到此异常,请参阅顶部。

答案 1 :(得分:0)

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