我有一个使用TCP客户端的相当简单的客户端/服务器架构。服务器设置为关闭来自客户端的连接,该客户端在两分钟内未收到消息。我已经确认使用C ++ TCP客户端为我的Android设备工作正常。但是,即使在服务器关闭连接后,我的C#客户端似乎也始终处于连接状态。
我尝试了各种各样的事情,似乎没有人准确地报告连接已经关闭。即使在发送和接收消息unlike what is specified in the MSDN documentation之后,TcpClient.Connected也始终返回true。 C#客户端代码:
var client = new TcpClient(server, port);
var stream = client.GetStream();
//Wait >2 mins to get disconnected
await Task.Delay(Timespan.FromMinutes(2.5));
void Write()
{
try
{
var data = BuildByteArrayFromMyData();
stream.Write(data , 0, data.Length);
if(!client.Connected)
{
//Never triggered, Connected always equals true
}
}
catch(Exception ex)
{
//Never triggered
}
}
void ReadOnAnotherThread()
{
while (true)
{
try
{
while (!stream.DataAvailable)
{
if (!client.Connected) break; //Never triggered, Connected always equals true
else await Task.Delay(TimeSpan.FromMilliseconds(11));
}
byte[] data = new byte[];
int bytes = stream.Read(data, 0, data.Length);
}
}
catch(Exception ex)
{
//Never triggered
}
}
问:使用TcpClient.Connected的正确方法是什么?
类似的问题不回答这里提出的问题: