2014-10-30 1 views
1

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

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

TLDR: Я хочу иметь возможность напрямую подключать двух клиентов в двух совершенно разных сетях с помощью общего сервера и без какой-либо конфигурации маршрутизатора для клиентов.

ответ

1

Эта техника называется перфорирование

«Перфорация является метод компьютерных сетей для установления связи между двумя сторонами в отдельных организациях, которые и за ограничительной брандмауэры. Используется для таких приложений, как онлайн-игры, P2P и VoIP, оба клиента устанавливают соединение с неограниченным сторонним сервером, который раскрывает для них информацию о внешних и внутренних адресах. Поскольку каждый клиент инициировал запрос на сервер, сервер знает свои IP-адреса и номера портов, назначенные для этого сеанса, к другому ». из википедии

также рассмотрим на этом answer

+0

Спасибо за ваш ответ. Я читал много о дырочной штамповке с момента вашего комментария и пробовал реализацию, но хотя я использую setReuseAddress (true) как на сокете на сервере, так и на сервере serverocket, я получаю «java.net.BindException: Address уже в использовать "во втором bind. Вы ответили на мой вопрос, спасибо. Я создам еще один вопрос для моих ошибок реализации. –

Смежные вопросы