Я хочу использовать UDP-сокеты для моей XNA-Networkgame.И сейчас я пытаюсь закодировать надежный поток прослушивания, но есть некоторые проблемы.
Если я использую сокет. Прием будет ждать до пакета.Это хорошо для моего слушателя.У моего потока есть цикл 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 я не нашел пример слушателя, который прослушивает более одного пакета.Как справиться с этим другим программистом?