C #: поток прослушивателя UDP

Я хочу использовать UDP-сокеты для своей сетевой игры XNA. И сейчас я пытаюсь закодировать надежный поток прослушивания, но есть некоторые проблемы.

Если я использую сокет. Прием будет ждать до пакета. Это хорошо для моего слушателя. У моего потока есть цикл while, подобный следующему:

while(Listen == true)
{
    socket.Receive(...);
}

Но если я поменяю флаг прослушивания на false (если я хочу прекратить слушать), он застрянет в последнем .Receive ().

Затем я посмотрел на Методы .BeginReceive (). Это вызовет метод, если пакет прибыл. Но для получения данных я должен использовать .EndReceive (), и с этим у меня проблема. Я все еще хочу прослушивать пакеты и не прекращать прослушивание, если пакет приходит.

Поэтому я все еще использую блокирующую версию с ".Receive ()". Я мог бы заставить поток прослушивания отменить вызов, вызвав: Thread.abort (), но это не очень хорошо.

В настоящее время я проверяю, доступны ли данные:

while(Listen == true)
{
    if(socket.Available > 0)
    {
        socket.Receive(...);
    }
}

Но я думаю, что это не лучший способ ... Если вскоре после предложения if другой поток вызывает socket.Receive (..), он снова застрянет непреднамеренно. Нет ли способа отменить метод .Receive (..)? Я попытался установить тайм-аут, но если .Получить тайм-аут, он выдаст исключение ...

Я хочу простой поток прослушивания udp, я могу изящно остановиться. :-) В MSDN я не нашел слушателя-примера, который прослушивает более одного пакета. Как справиться с этим другой программист?

8
задан ROMANIA_engineer 16 August 2017 в 18:35
поделиться