Я долго искал простую библиотеку UDP C ++, которая обеспечивает надежность. Я только что натолкнулся на ENet, который выглядит отлично, за исключением того, что я не могу найти никакой поддержки для пробивки NAT в документации. В Интернете, кажется, есть несколько человек, обсуждающих это, но мне еще предстоит найти определенный ответ на вопрос, возможно ли это.
У меня уже есть сторонний сервер, настроенный на раздачу внешних ips & порты для клиентов.
Если это возможно, может кто-нибудь дать псевдокод / шаги, описывающие процесс?
Я понял это. Вот что я сделал:
использование STUN для перфорации, а затем использовать ENet.
Связь с STUN-сервером и получение публичная конечная точка а также Тип NAT. Убедитесь, что тип NAT открыт, а затем продолжайте => использовать getsockname на сокет, который используется для связи с STUN-сервером, чтобы получить локальная конечная точка а затем закройте эту розетку.
Теперь создайте сервер ENet и инициализируйте его локальная конечная точка. Теперь ваши клиенты ENet с других компьютеров могут подключаться к серверу, используя публичная конечная точка.
UDP может отбрасывать пакеты и отправлять пакеты не по порядку.
Заказывать пакеты тривиально.
Но если пакет был отброшен, восстановить его невозможно. Однако многие системы, использующие UDP, предоставляют вам другой поток с дублирующимися данными. В этом случае вы можете просто создать резервную копию со вторичным потоком и затем обновить проверку, если пакет, отброшенный в первом потоке, доступен во втором.