在我等待TcpClient的响应时,在10秒后退出我的while循环

时间:2013-01-28 12:29:16

标签: c# while-loop tcpclient ping break

我正在尝试在基本的客户端 - 服务器聊天中实现ping。我的问题出在服务器端。我发送ping然后我想等待最多10秒让客户端ping我。如果客户端在10秒后没有ping回来,我希望我的while循环中断。这就是我所做的:

public void ping()
{
    send("#PIN#");
    bool ponged = false;
    while (true) 
    {
        string rec = receive(); // it blocks here !!!!!!!!!!
        if (rec == "#PON#")
            ponged = true;
    }
}

我的send()receive()方法没有问题。他们在其他地方工作得很好 我尝试使用秒表和计时器在10秒后使循环中断。问题来自于接收功能阻塞直到收到消息。以下是阻止函数的接收函数的一部分:

bytesRead = clientStream.Read(byteMsg, 0, 4096);

据我所知,这是从我的客户端接收消息的正确方法。但是当然如果客户端断开连接,我将永远不会被ping回来,这意味着我的receive()方法永远不会结束。如果我的接收方法永远不会结束,那么我的while循环永远不会有机会检查stopWatch.Elapsed()或从ElepsedEventHandler拨打Timer

所以问题是,我怎么能强制这个while循环在10秒后断开,知道while循环中的一个方法可能不会结束?

感谢您的时间。

1 个答案:

答案 0 :(得分:2)

如果您使用NetworkStream来读取数据,则可以使用ReadTimeout属性。

  

如果读取操作未在指定的时间内完成   此属性,read操作抛出IOException。