я программирую приложение голосового чата, но проблема в том, что когда клиент использует соединение с брандмауэром маршрутизатора
я решил эту проблему с TCP-соединением, но с UDP-соединением я не знал, как я могу решить эту проблему
я пытаюсь сделать это
но эта работа однажды и много раз не работала, я не знаю почему.
любая помощь.
То, что вы пытаетесь, это пробивание UDP-дырок. Но немногие маршрутизаторы, которые имеют симметричный NAT, пробивать дыры очень сложно и противоречиво (когда это возможно). Читайте о различных NAT в Википедии, вы получите больше понимания.
Для прохождения NAT требуется внешний сервер «подбора», который возможен на всех НО-несимметричных маршрутизаторах и брандмауэрах. Проще говоря, эти «симметричные» маршрутизаторы изменяют исходящий / входящий порт ваших данных каждый раз, когда вы меняете либо IP-адрес, либо ПОРТ пункта назначения, что фактически сводит на нет «соответствие», которое пытается выполнить сервер.
Есть и другие «хитрые» способы сделать пробой, но им не хватает согласованности.
Я бы посоветовал вам прочитать о различиях типов NAT (Ассиметричный, Симметричный, Полный конус, Ограниченный конус, Порт ограниченный конус). Также убедитесь, что вы читаете о STUN, который позволяет вам определить тип NAT, за которым работает ваш клиент. Наконец, вы должны прочитать об UPnP, который является функцией, которую имеет большинство маршрутизаторов, и позволяет программам самостоятельно регистрироваться и открывать порты, без необходимости выполнять это вручную через интерфейс маршрутизатора.