Я уже несколько дней бездельничаю Boost Asio , но я застрял в этом странном поведении. Пожалуйста, позвольте мне объяснить.
Компьютер A отправляет непрерывные пакеты udp каждые 500 мс на компьютер B, компьютер B желает читать пакеты A со своей скоростью, но хочет только последний пакет A, очевидно, самый обновленный.
До меня дошло, что когда я делаю:
mSocket.receive_from (boost :: asio :: buffer (mBuffer), mEndPoint);
Я могу получить OLD-пакеты, которые не были обработаны (почти каждый раз).
Имеет ли это какой-то смысл? Мой друг сказал мне, что сокеты поддерживают буфер пакетов, и поэтому, если я читаю с меньшей частотой, чем отправитель, это может произойти. ¡
Итак, первый вопрос: как можно получить последний пакет и выбросить те, которые я пропустил?
Позже я попытался использовать асинхронный пример документации Boost, но обнаружил, что он не выполняет то, что я хотел.
http://www.boost.org/doc/libs/1_36_0/doc/html/boost_asio/tutorial/tutdaytime6.html
Из того, что я мог сказать, async_receive_from должен вызывать метод "handle_receive" , когда приходит пакет, и это работает для первого пакета после запуска службы " «.
Если я хочу продолжить прослушивание порта, я должен снова вызвать async_receive_from в коде дескриптора. право?
НО я обнаружил, что я запускаю бесконечный цикл, он не ждет следующего пакета, он просто вводит "handle_receive" снова и снова.
Я не делаю серверное приложение, много чего происходит (это игра), поэтому мой второй вопрос: нужно ли использовать потоки для правильного использования асинхронного метода получения, есть ли пример с темы и асинхронный получат?