TcpClient.Connected始终为True

时间:2014-10-23 01:38:47

标签: c# tcp tcpclient

我有一个使用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的正确方法是什么?


类似的问题不回答这里提出的问题:


0 个答案:

没有答案