我正在使用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)
{
答案 0 :(得分:1)
问题出在Windows防火墙中,如果我关闭防火墙工作完美。如果打开防火墙并且我将规则添加到inbouds和outbounds,我会收到此异常,请参阅顶部。
答案 1 :(得分:0)
根据我的经验,只有在您连接的内容关闭连接时才会抛出此异常。如果这是在整个互联网上,沿途有许多跳跃可能导致丢弃连接。如果您确信这不应该发生(可能双方都在您的基础设施中),那么我建议运行wireshark跟踪。在那里你可以很容易地看到一个连接被关闭,如果它正在关闭,谁将关闭。查找fin标志设置为1的tcp数据包。