我正在使用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数据包