.NET 3.x Зависает socket.ReceiveFrom из-за чего не могу прервать поток - C#
Формулировка задачи:
Доброго времени суток!
При плохой связи после отправки запроса поток подвисает, т.к. socket.ReceiveFrom() не получает ответа из сети. Т.е., поток бесконечно ждёт ответа, которого уже и быть-то не может. Ниже этот код:
При этом, параметры таймаута сокету присвоить не получается (вызывает исключение) и не получается прервать поток - Abort() не работает, а Join() зависает вместе с потоком.
Кто что может подсказать?
П.С.: WinCE 5.0, .NET CF 3.5.
byte[] ipByte = { 192, 168, 1, 2 }; IPAddress ip = new IPAddress(ipByte); IPEndPoint ipep = new IPEndPoint(ip, 123); EndPoint ep = new IPEndPoint(ip, 123); byte[] ntpData = new byte[48]; ntpData[0] = 0x1B; using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) { socket.SendTo(ntpData, 0, ntpData.Length, SocketFlags.None, ep); socket.ReceiveFrom(ntpData, SocketFlags.None, ref ep); }
Решение задачи: «.NET 3.x Зависает socket.ReceiveFrom из-за чего не могу прервать поток»
textual
Листинг программы
using (Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp)) { socket.SendTo(ntpData, 0, ntpData.Length, SocketFlags.None, ep); while (!cancelReceive) // cancelReceive - флаг прерывания ожидания { if (socket.Avaliable != 0) { socket.ReceiveFrom(ntpData, SocketFlags.None, ref ep); break; } else Thread.Sleep(50); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д