gpt4 book ai didi

c# - 为什么当我在 using 语句中包含我的 StreamWriter/StreamReader/NetworkStream 我的服务器崩溃 c#

转载 作者:行者123 更新时间:2023-11-30 18:13:59 26 4
gpt4 key购买 nike

我的网络服务器中有以下语句:

 using(NetworkStream networkStream = client.tcp.GetStream());
{
if (networkStream.DataAvailable)
{
using(StreamReader streamReader = new StreamReader(networkStream, true))
{
//do something
}
}
}

问题是,当我在这种情况下(或使用 StreamWriter)使用 using() block 时,出现以下异常:

an established connection was aborted by the software in your host machine

没有“using”它工作得很好,但我认为在 IDisposable 类上调用“using”是一个很好的做法。

编辑:步进调试器看到它​​在这部分崩溃了:

 using (StreamWriter streamWriter = new StreamWriter(c.tcp.GetStream()))
{
await streamWriter.WriteLineAsync(data);
await streamWriter.FlushAsync();
}

但变量中的所有数据都是正确的,没有空 StreamWriter 并且数据有值。

最佳答案

我认为它关闭连接太早了,您需要在写入后从服务器读取响应。

在你写完之后试着做一个粗略的测试:

do
{
await streamReader.ReadLineAsync();
} while (networkStream.DataAvailable);

您需要在 StreamWriter 上面为 StreamReader 添加另一个 using

所以像这样:

using (NetworkStream networkStream = client.GetStream())
using (StreamWriter streamWriter = new StreamWriter(networkStream))
using (StreamReader streamReader = new StreamReader(networkStream))
{
await streamWriter.WriteLineAsync(data);
await streamWriter.FlushAsync();

do
{
await streamReader.ReadLineAsync();
} while (networkStream.DataAvailable);

networkStream.Close();
}

关于c# - 为什么当我在 using 语句中包含我的 StreamWriter/StreamReader/NetworkStream 我的服务器崩溃 c#,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/51696551/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com