2016-06-12 2 views
1

Я создал игру в JAVA. У этого есть два игрока, один будет сервером.Как напрямую связаться с внешним клиентом с IP-адресом и портом

Компьютер создает игру и обслуживает ее. Другой компьютер (внешний) должен подключаться к серверу с использованием его IP и порта. Когда они подключаются, начинается игра, и клиент-клиент отправляет свои ходы на сервер, здесь вычисляются ходы, а новые позиции клиента и сервера на карте игры возвращаются и обновляются.

Проблема заключается в том, что когда я создаю игру локально, сервер и клиент в том же маршрутизаторе, используя локальный IP, игра начинается успешно. Но когда я создаю игру и пытаюсь подключиться с внешнего компьютера, сервер не найден.

Я читал немного, и проблема, вероятно, в том, что это межсетевой экран компьютера или NAT маршрутизатора (что я не слишком понял). Ну, я нашел что-то вроде STUN, там говорят, что он обходит брандмауэр и блокировку маршрутизатора с помощью STUN-сервера, а также нашел список бесплатных STUN-серверов (here). Но я не знаю, что с этим делать. Серверы STUN будут поддерживать связь с сервером и клиентом?

Возможно, без покупки какого-либо онлайн-сервиса, а также с компьютерами с двумя игроками (серверным проигрывателем и клиентским проигрывателем), успешно выполните соединение без отключения портфолио или брандмауэра?

Я хочу поделиться своей игрой, но я не могу попросить каждого игрока отключить их брандмауэр, чтобы играть. =/

+1

Вам необходимо настроить переадресацию портов/межсетевой экран только на стороне сервера. Клиентам не нужно ничего особенного делать. – gudok

+0

Это вопрос о сетях и конфигурации сети, а не о программировании. Это не по теме. –

ответ

2

Для прямой (одноранговой) связи, если вы хотите разместить сервер в любом месте сети (особенно за NAT), вам необходимо использовать технику черного магия, известную как «NAT Traversal».

Многие подробности об этом описаны в статье Peer-to-Peer Communication Across Network Address Translators. Оттуда вам понадобится раздел «Отверстие для отверстий TCP».

В любом случае обход NAT не работает во всех случаях (всегда есть исключения, когда NAT работает не так, как ожидалось, алгоритмом обхода). Таким образом, лучший способ решить все проблемы - разместить выделенный сервер где-то с общедоступным IP-адресом и использовать его.