.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);
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д