【发布时间】:2018-04-03 00:09:08
【问题描述】:
我正在使用 NetworkStream 来保持可以发送消息的开放 TCP/IP 连接。我收到一条消息,处理它,然后返回一个 ACK。我正在使用一个偶尔会收到消息的站点,但是当我发送 ACK 时,我得到一个 IOException。有时这只会持续一两条消息(我可以收到下一条消息),而其他时候它会一直持续到服务停止并重新启动。
下面是我的 NetworkStream 的代码,没有任何处理:
using (NetworkStream stream = client.GetStream())
{
stream.ReadTimeout = ReadTimeout;
...
if (stream.CanRead && stream.DataAvailable)
bytesRead = stream.Read(receivedBytes, 0, BufferSize);
...
stream.Write(ack, 0, ack.Length);
}
请注意,代码在读取新消息和发送 ACK 之间循环。
当我调用stream.Write时,有时会出现以下异常:
System.IO.IOException: Unable to write data to the transport connection: An established connection was aborted by the software in your host machine. ---> System.Net.Sockets.SocketException: An established connection was aborted by the software in your host machine
at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
--- End of inner exception stack trace ---
at System.Net.Sockets.NetworkStream.Write(Byte[] buffer, Int32 offset, Int32 size)
at Framework.Communication.Model.Server.AcceptMessage(IAsyncResult ar)
我查看了这条消息并找到了几个sources 用于几种不同的通信方法。听起来这是一个非常通用的异常,并不能真正说明发生了什么。
有谁知道会导致这种情况的原因,或者我可以从哪里开始寻找缩小解决方案的范围?
【问题讨论】:
标签: c# tcp ioexception networkstream