Использование рефлексивного транспорта сервера Stun - PullRequest
0 голосов
/ 05 мая 2018

Я пытаюсь разработать свой собственный клиент Lite-ICE. Я могу получить ответ STUN, который дает мне рефлексивные адреса моего сервера. Вопрос, который у меня есть, касается шагов после этого.

Итак, я получил IP1 и Порт1 в качестве рефлексивных адресов моего сервера от сервера STUN, назначенного моему клиенту STUN с локальным адресом L-IP1 и L-Port1.

Я понимаю, как это работает, если L-IP1 и L-Port1 мультиплексированы для отправки / получения сообщений без STUN на / с удаленного сервера.

Что если я хочу, чтобы другое приложение, совершенно отдельный процесс использовал те же привязки? Итак, можно ли запустить другое приложение, чтобы привязать порт UDP к L-Port1? Если да, получат ли приложения (STUN) и это другое приложение сообщение от удаленных серверов с назначением назначения IP1 и Port1 (с точки зрения удаленного сервера)? А тот, который не понимает тип сообщения или метод, просто игнорирует его? Это так нормально работает?

1 Ответ

0 голосов
/ 07 мая 2018

Что если я хочу, чтобы другое приложение, совершенно отдельный процесс использовал те же привязки?

Обычно каждое приложение получает свои собственные привязки с другим локальным портом.

Итак, можно ли запустить другое приложение, чтобы привязать порт UDP к L-Port1?

Вы получите ошибку привязки сокета, если другой процесс имеет сокет, связанный с тем же локальным портом. Есть способы обойти это, но читайте дальше, это не то, что вы, вероятно, хотите.

Если это так, будут ли оба приложения (STUN) и это другое приложение получать сообщения от удаленных серверов с назначением, настроенным на IP1 и Port1 (с точки зрения удаленного сервера)?

Вы можете использовать опцию SO_REUSEADDR. Однако, если у вас есть два процесса с сокетами для одного и того же локального порта UDP, входящие пакеты для этого порта будут маршрутизироваться в любой сокет. (Первый, кто вызвал recvfrom, получает пакет, иначе он недетерминирован).

А тот, кто не понимает тип или метод сообщения, просто игнорирует его? Это так нормально работает?

номер

Я думаю, что вы говорите, что вы выполняете STUN в одном процессе, но хотите, чтобы реальное приложение, которое использует эти привязки, запускалось в другом процессе. Просто сделайте, чтобы ваше приложение само выполняло привязки STUN и просто повторно использовало сокет для данных. Если вы попытаетесь мультиплексировать данные STUN и приложения через один и тот же сокет, вам понадобится (ваш) код, чтобы различать их.

...