在以下線程中,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