Доступ к локальному хосту: порт с эмулятора Android

Я запускаю веб-службу на своей локальной машине, которая работает на localhost:54722 .

Я хочу вызвать службу из приложения, работающего в эмуляторе Android.

Я прочитал, что с 10.0.2.2 приложения 10.0.2.2 в приложении будет доступ к локальному хосту, но он, похоже, не работает с номером порта. В нем указано HttpResponseException: Bad Request .

Однако есть гораздо лучшее решение. Вы можете получить доступ к своей главной машине с IP-адресом « 10.0.2.2 ».

Это было разработано таким образом командой Android. Таким образом, ваш веб-сервер может отлично работать на локальном хосте и с вашего Android-приложения, вы можете получить к нему доступ через « http://10.0.2.2:<hostport> ».

Используйте 10.0.2.2 для AVD по умолчанию и 10.0.3.2 для Genymotion

Если вы используете IIS Express, вам может потребоваться привязка ко всем именам хостов вместо «localhost». Проверьте этот прекрасный ответ:

https://stackoverflow.com/a/15809698/383761

Скажите самому IIS Express, чтобы он привязывался ко всем IP-адресам и именам хостов. В файле .config (обычно это% userprofile% \ My Documents \ IISExpress \ config \ applicationhost.config или $ (solutionDir) .vs \ config \ applicationhost.config для Visual Studio 2015), найдите элемент привязки вашего сайта и добавьте

 <binding protocol="http" bindingInformation="*:8080:*" /> 

Обязательно добавьте его как второе обязательство вместо изменения существующего, или VS просто добавит новый сайт, добавленный с помощью (1) Кроме того, вам может потребоваться запустить VS в качестве администратора.

У меня есть веб-сервер, работающий на моем localhost.

Если я открою эмулятор и хочу подключиться к моему локальному хосту, я использую 192.168.xx Это означает, что вы должны использовать свой локальный IP-адрес. Кстати, ваше HttpResponseException (Bad Request) не означает, что хост недоступен.

Некоторые другие ошибки приводят к этому исключению.

«BadRequest» – это ошибка, которая обычно отправляется самим сервером, см. Rfc 2616

10.4.1 400 Плохой запрос

Запрос не мог быть понят сервером из-за неправильного синтаксиса. Клиент НЕ ДОЛЖЕН повторять запрос без изменений.

Таким образом, вы получили рабочее соединение с сервером, но ваш запрос не соответствует форме expecet. Я не знаю, как вы создаете соединение, какие заголовки включены (если они есть), но это то, что вы должны проверить.

Если вам нужна дополнительная помощь, объясните, что такое ваш код и что он использует для подключения к серверу, поэтому у нас есть большая картина.

Вот вопрос с одной и той же проблемой – ответ заключался в том, что тип содержимого не был установлен в заголовке.

Вам нужно установить URL как 10.0.2.2:portNr

portNr = данный порт от ASP.NET Development Server моя текущая служба работает на localhost:3229/Service.svc

Поэтому мой url 10.0.2.2:3229

Я исправил свою проблему таким образом

Я надеюсь, что это помогает…

Я хотел бы показать вам, как я обращаюсь к IISExpress Web API из моего Android-эмулятора. Я использую Visual Studio 2015. И я вызываю Android-эмулятор Android из Android Studio.

Все, что мне нужно сделать, это добавить следующую строку в конфигурацию привязки в файле applicationhost.config

 <binding protocol="http" bindingInformation="*:<your-port>:" /> 

Затем я проверяю и использую IP4-адрес для доступа к моему API из эмулятора Android

Требование: вы должны запустить Visual Studio в качестве администратора. Это сообщение дает отличный способ сделать это.

Для получения дополнительной информации, пожалуйста, посетите мой пост на github

Надеюсь это поможет.

Localhost, казалось, работал нормально в моем эмуляторе при запуске, а затем я начал получать отказ от отказа. Я использовал 127.0.2.2 из браузера эмулятора, и он работал, и когда я использовал это в своем приложении для Android в эмуляторе, он снова начал показывать отказ в соединении ,

То я сделал ifconfig, и я использовал ip 192.168.2.2, и он отлично работал

Плохой запрос обычно означает, что формат отправляемых данных неверен. Может быть несоответствие данных. Если вы получаете плохой запрос, вы можете подключиться к серверу, но запрос не отправляется должным образом.

Если кто-то все еще ищет это, так оно и работает для меня.

Вам необходимо найти IP-адрес вашей машины в отношении подключенного устройства / эмулятора. Для Эмуляторов на пути, следуя ниже шаги;

  1. Перейдите в виртуальный ящик виртуальной машины -> выберите подключенное устройство в списке.
  2. Выберите «Настройки» -> «Сеть» – «Определите, к какой сети подключено устройство. Для меня это был «VirtualBox Host-Only Ethernet Adapter # 2».
  3. В virtualbox перейдите в Files-> Preferences-> Network-> Host-Only Networks и узнайте IPv4 для сети, указанной выше. (Поворотом вы получите информацию)

Предоставьте этому IP-адресу доступ к локальному хосту из эмулятора. Порт такой же, как и при запуске / публикации ваших сервисов.

Примечание № 1: Убедитесь, что вы позаботились о брандмауэрах и правилах входа.

Примечание №2: Пожалуйста, проверьте этот IP-адрес после перезагрузки компьютера. По какой-то причине даже если я предоставил «Использовать следующий IP-адрес», IP-адрес только для хоста изменился.

Я решил решить проблему, когда уровень сервиса использует Visual Studio IIS Express. Просто укажите, что 10.0.2.2:port не будет работать. Вместо того, чтобы возиться с IIS Express, как упоминалось в других сообщениях, я просто поставил прокси-сервер перед IIS Express. Например, apache или nginx. Nginx.conf будет выглядеть так:

  # Mobile API server { listen 8090; server_name default_server; location / { proxy_pass http://localhost:54722; } } 

Затем андроид должен указывать на мой IP-адрес, как 192.168.xx: 8090

Я решил это с установкой «Конвейер по Keyoti» в Visual Studio Professional 2015. Конвейер создает REMOTE-адрес (ваш IP) с портом (45455), который разрешает внешний запрос. Пример:

Введите описание изображения здесь

Конвейер позволяет тестировать веб-приложения с внешних планшетов и телефонов в вашей сети или с эмуляторов Android (без http://10.0.2.2:<hostport> )

Шаги находятся в следующей ссылке:

https://marketplace.visualstudio.com/items?itemName=vs-publisher-1448185.ConveyorbyKeyoti

Если вы используете какой-либо сторонний пакет, например node express или angular-cli, вам нужно будет найти IP-адрес вашего компьютера и присоединить свой хост к этому IP-адресу в конфигурации запуска сервера (вместо localhost). Затем запустите его из эмулятора, используя IP. Например, мне пришлось использовать: ng serve -H 10.149.212.104 использовать угловое cli. Затем из эмулятора я использовал: http://10.149.212.104:4200

Укажите IP-адрес вашей системы, имеющей интернет в URL-адресе. Например: 190.168.1.90 это работает для меня