【发布时间】:2021-01-26 23:38:36
【问题描述】:
所以我使用 TcpClient 类通过我的 C# 程序连接到代理服务器。我建立连接并使用 ReadAsync 方法继续从服务器读取到缓冲区。但是当代理设备断开连接时,ReadAsync 方法似乎进入了一个循环,并且没有进一步的代码正在处理。有趣的是,没有抛出异常,Task 仍然继续工作(在 Listen() 调用中放置 await 会阻止进一步执行,即使设备断开连接也是如此)。
代码:
public async Task Listen()
{
try
{
await server.ConnectAsync(ServerIP, ServerPort);
if (server.Connected)
{
using (NetworkStream stream = server.GetStream())
{
while (server.Connected)
{
try
{
byte[] buffer = new byte[server.ReceiveBufferSize];
int length = await stream.ReadAsync(buffer, 0, buffer.Length);
}
catch(Exception e)
{
server.Close();
}
}
}
}
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
server.Close();
}
}
有人知道如何检测设备何时断开连接,以便我进一步处理吗?代理服务器没有关闭,它只是停止发送数据。
【问题讨论】:
标签: c# .net networkstream