我正在尝试在我的基本客户端-服务器聊天中实现 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 循环永远不会有机会ElepsedEventHandler
从Timer
.
所以问题是,我如何在知道该 while 循环中的一种方法可能不会结束的情况下强制该 while 循环在 10 秒后中断?
感谢您的时间。