Я хочу использовать 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 я не нашел слушателя-примера, который прослушивает более одного пакета. Как справиться с этим другой программист?