1

我正在尝试在我的基本客户端-服务器聊天中实现 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() 方法将永远不会结束。stopWatch.Elapsed()如果我的接收方法永远不会结束,那么我的 while 循环永远不会有机会ElepsedEventHandlerTimer.

所以问题是,我如何在知道该 while 循环中的一种方法可能不会结束的情况下强制该 while 循环在 10 秒后中断?

感谢您的时间。

4

1 回答 1

2

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

如果读取操作未在此属性指定的时间内完成,则读取操作将引发 IOException。

于 2013-01-28T12:33:42.713 回答