2014-11-24 3 views
0

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

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

приватный статический конечный строковый URLLocalhost = "http://localhost:8081/"; // не работает
private static final Строка URLPCName = "http://PCNAME:8081/"; // не работает
закрытый статический окончательный String URLIPAddress = "http://192.168.x.y:8081/"; // работает, но IP должен быть изменен

@Override 
public List<Spike> getSpikes() { 
    RestAdapter restAdapter = new RestAdapter.Builder().setEndpoint(URLPCName).build(); 

я получаю несколько ECONNREFUSED ошибки, когда он не работает.
В ближайшее время он не будет опубликован, поэтому у меня нет URL-адреса для этого.

Для этого я нашел some solutions, но они требуют внесения изменений в мое устройство. (Не пробовал их) настройки

  • Изменение DNS
  • Редактировать файл хостов

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

Как подключиться с использованием имени хоста из моего кода?


Связанные вопрос, не решает мой вопрос: How to connect my android app to the remote web server

+0

Вы пользователь PCNAME доступен в сети, к которой вы подключены? – Blackbelt

+0

Да, я могу связаться с другими ноутбуками в одной сети. – miva2

+0

и устройство подключено к той же сети – Blackbelt

ответ

1

Да, AIUI, это, как ожидается. localhost относится к адаптеру, который использует устройство Android, поэтому направляет запросы на сам телефон (и, следовательно, сбой).

Исходный IP работает отлично, так как он однозначен на всех устройствах.

http://PCNAME:8081/ немного зависит от того, какое имя PCNAME здесь, и что работает ваш ноутбук. Если это имя машины Windows (с использованием WINS), то по умолчанию это не будет работать с Android/Linux. Переключение на полное доменное имя, например. PCNAME.subdomain.mydomain.org должно работать, но это зависит от вашего DHCP-маршрутизатора (или ручной настройки сети в Android, который вы хотите избежать) для поиска этого домена, когда он не указан, и Android, уважающий эту маршрутизацию для беспроводной связи, которую я нашел, не (возможно, this Android bug).

Вероятно, проще иметь это, передав параметр сборки, или иметь конфигурационные файлы для параметров отладки и производства в вашей сборке. Еще одно простое решение - просто зарезервировать статический IP-адрес для вашего ноутбука, используя резервирование DHCP, или просто вручную указывая IP-адрес.

+0

Мой ноутбук - это машина для Windows. – miva2

+0

ОК, так, как указано выше, вам необходимо отсортировать свой DNS в настройках Windows/локальной сети. Ваш Windows 'PCNAME' не является допустимым (DNS) именем хоста, пока вы [установите DNS-домен] (http://superuser.com/questions/61827/how-can-i-add-a-search-domain кол-окна-7). Другим вариантом является любое количество протоколов обнаружения сервисов для поиска _dynamically_, где конечные точки вашего сервера (например, SSDP UPnP, Eureka, всевозможные вещи), но, вероятно, переполняют здесь. – declension

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