我从以下代码
获得IOExectionpublic async Task Register(string handle)
{
// send register handle
using (NetworkStream stream = client.GetStream())
{
await RegisterHandle(stream);
var line = "hello world";
await SendMessage(stream, line);
}
}
public async Task SendMessage(NetworkStream stream, string message)
{
Console.WriteLine("SendMessage(" + message + ")");
await Async.Write(stream, message);
Console.WriteLine("End of SendMessage");
}
System.AggregateException: One or more errors occurred. (Unable to transfer data on the transport connection: An established connection was aborted by the software in your host machine.) ---> System.IO.IOException: Unable to transfer data on 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
我该怎么做才能解决这个问题?
RegisterHandle只是写入数据然后回读;哪个工作正常。但是在SendMessage中写入时失败了。
答案 0 :(得分:0)
它实际上都在docuemtnation中详细解释了
您需要尝试检查异常消息,如果您可以控制连接套接字,则可以解决它关闭的问题。如果以上都不是您可能遇到网络问题,但我会先进行Occam's razor分析
NetworkStream.Write Method (Byte[], Int32, Int32)
IOException 写入网络时出现故障。
-OR -
访问套接字时发生错误。请参阅备注部分 了解更多信息。
<强>说明强>
Write方法从指定的偏移量开始并发送大小字节 从缓冲区的内容到网络。 Write方法阻塞 直到发送请求的字节数或SocketException为止 抛出。如果收到SocketException,请使用 SocketException.ErrorCode属性获取特定的错误代码, 并参考Windows套接字版本2 API错误代码 MSDN中的文档,以获取错误的详细说明。
注意强>
通过访问来检查NetworkStream是否可写 CanWrite属性。如果您尝试写入NetworkStream 不可写,你会得到一个IOException。如果你收到了 IOException,检查InnerException属性以确定它是否是 由SocketException引起。