.NET 3.x Зависает socket.ReceiveFrom из-за чего не могу прервать поток - C#

Узнай цену своей работы

Формулировка задачи:

Доброго времени суток! При плохой связи после отправки запроса поток подвисает, т.к. socket.ReceiveFrom() не получает ответа из сети. Т.е., поток бесконечно ждёт ответа, которого уже и быть-то не может. Ниже этот код:
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);
}
При этом, параметры таймаута сокету присвоить не получается (вызывает исключение) и не получается прервать поток - Abort() не работает, а Join() зависает вместе с потоком. Кто что может подсказать? П.С.: WinCE 5.0, .NET CF 3.5.

Решение задачи: «.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);
                }
            }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.167 из 5
Похожие ответы