我正在尝试在基本的客户端 - 服务器聊天中实现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循环中的一个方法可能不会结束?
感谢您的时间。
答案 0 :(得分:2)
如果您使用NetworkStream来读取数据,则可以使用ReadTimeout属性。
如果读取操作未在指定的时间内完成 此属性,read操作抛出IOException。