在以下线程中,UDP数据包将从客户端读取,直到布尔字段Run被设置为false。C#处理线程和阻塞套接字
如果在Receive方法被阻塞时Run被设置为false,它将永远保持阻塞状态(除非客户端发送数据,这将使线程循环并再次检查Run条件)。
while (Run)
{
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] data = udpClient.Receive(ref remoteEndPoint); // blocking method
// process received data
}
我通常通过在服务器上设置超时来解决问题。它工作正常,但对我来说似乎是一个零星的解决方案。
udpClient.Client.ReceiveTimeout = 5000;
while (Run)
{
try
{
IPEndPoint remoteEndPoint = new IPEndPoint(IPAddress.Any, 0);
byte[] data = udpClient.Receive(ref remoteEndPoint); // blocking method
// process received data
}
catch(SocketException ex) {} // timeout reached
}
你会如何处理这个问题?有没有更好的方法?
只需在您致电关闭前致电断开连接,它不会引发异常。 – zezba9000 2014-08-24 06:42:32