2015-10-15 4 views
0

Я пытался настроить приложение, которое позволяет общаться между двумя устройствами, сервером и клиентом. Я установил соединение и могу отправлять сообщения между ними до тех пор, пока они подключены к одному и тому же источнику Интернета. Когда я подключаю устройства к двум различным источникам, я не могу установить связь между ними. Он работает, введя IP-адрес сервера, к которому вы хотите подключиться.Сервер на Android доступен с устройств не в локальной сети?

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

Из всех поисковых запросов, которые я сделал, я обнаружил, что это связано с тем, что мой сервер привязан к локальному хосту. Итак, мой вопрос: Как я могу сделать свой сервер доступным из любого места, независимо от того, к какой сети вы подключены?

Я использовал этот учебник, чтобы получить мой сервер работает:

http://android-er.blogspot.com/2014/02/android-sercerclient-example-server.html

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

+0

Может ли кто-нибудь сказать мне, возможно ли, чтобы серверы работали независимо друг от друга на каждом телефоне, который запускает приложение, но по-прежнему доступны по всему миру? – Restnom

ответ

1

Вам понадобится создать сервер ретрансляции. Это было бы настроено с помощью приложения Java на ПК, и оно управляло бы виртуальными «комнатами», которые затем передавали сообщения клиентам. Для компьютера, на котором вы запускаете сервер ретрансляции, потребуется перенаправление портов, но клиенты этого не сделают. Большая часть кода из этого учебника может быть применена к этой концепции.

См: How to create a java Server that accepts client connections and then build a relay connection for a client pair

+0

Большое спасибо за информацию. Это похоже на решение. Я просто хочу знать, возможно ли, что это работает с каждым сервером, работающим на телефонах? – Restnom

+0

Я мог ошибаться, но я на 99 процентов уверен, что это невозможно. Беспроводная служба провайдеров 4G не могла позволить вам пересылать порты, и пользователю придется настраивать переадресацию портов для каждой локальной сети, к которой подключается. –

0

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