Доступ к локальному хосту: порт с эмулятора Android - программирование

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

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

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

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

4b9b3361

Ответ 1

Вы можете получить доступ к хост-машине с IP-адресом " 10.0.2.2 ".

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

Если ваш эмулятор должен иметь доступ к Интернету через прокси-сервер, вы можете настроить собственный HTTP-прокси с экрана расширенных элементов управления эмулятора. Открыв эмулятор, нажмите " Еще" dots, а затем нажмите " Настройки" и " Прокси". Отсюда вы можете определить свои собственные настройки прокси HTTP. screen-shot for HTTP config

Ответ 2

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

Ответ 3

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

fooobar.com/questions/19303/...

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

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

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

Ответ 4

Я решил это с помощью установки "Конвейер по Keyoti" в Visual Studio Professional 2015. Конвейер сгенерировал УДАЛЕННЫЙ адрес (ваш IP) с портом (45455), который разрешает внешний запрос. Пример:

enter image description here

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

Шаги в следующей ссылке:

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

Ответ 5

Я столкнулся с той же проблемой при выполнении веб-приложения в IIS Express при выполнении Visual Studio. чтобы исправить это, вам нужно перейти в свойства вашего проекта, затем нажать на вкладку "Отладка" и изменить http://localhost: [ВАШ ПОРТ] на http://127.0.0.1:[YOUR PORT] и установить URL-адрес андроида на http://10.0.2.2:[YOUR PORT]. это сработало для меня.

Ответ 6

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

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

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

Ответ 7

Проблема в том, что эмулятор Android отображает 10.0.2.2 в 127.0.0.1, а не в localhost. Поэтому настройте свой веб-сервер на serveron 127.0.0.1:54722 а не localhost:54722. Это должно сделать это.

Ответ 8

"BadRequest" - это ошибка, которая обычно отправляется самим сервером, см. rfc 2616

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

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

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

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

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

Ответ 9

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

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

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

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

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

Ответ 10

После запуска вашего локального хоста вы получите http://localhost:[port number]/ здесь вы нашли свой номер порта.

Затем получите свой IP-адрес из Command, откройте команду windows и введите ipconfig enter image description here

В моем случае IP был 192.168.10.33 поэтому мой URL будет http://192.168.10.33:[port number]/. В Android студия использует этот URL в качестве вашего URL. И после этого установите свой URL и номер порта в ручном прокси для эмулятора.

enter image description here

Ответ 11

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

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

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

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

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

Подробнее см. мое сообщение о github

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

Ответ 12

Для пользователей Laravel Homestead: если кто-либо использует Laravel вместе с hometead, вы можете получить доступ к бэкенду приложения, используя 192.168.10.10 в эмуляторе

До сих пор не работает? Еще одним хорошим решением является использование ngrok https://ngrok.com/

Ответ 13

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

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

Ответ 14

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

Ответ 15

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

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

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

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

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

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

Ответ 16

Я решил точно решить проблему, когда уровень сервиса использует 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.x.x: 8090

Ответ 17

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

Ответ 18

1) Запустите команду ipconfig в cmd

2) Вы получите такой результат enter image description here

3) Затем используйте IPv4-адрес сетевого адаптера 1 VMWare, а затем номер порта.

В моем случае это 8080, поэтому вместо localhost: 8080

Я использую 192.168.56.1:8080

enter image description here

Готово.....

Ответ 19

Поскольку 10.0.2.2 не является безопасным доменом для Android, вы должны разрешить незащищенные домены в конфигурации вашей сети для API 28+, где не-TLS-соединения по умолчанию запрещены.

Вы можете использовать мои следующие конфигурации:

Создайте новый файл в main/res/xml/network_security_config.xml как:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
    <domain-config cleartextTrafficPermitted="true">
        <domain includeSubdomains="true">localhost</domain>
        <domain includeSubdomains="true">10.0.2.2</domain>
    </domain-config>
</network-security-config>

И укажите это в AndroidManifest.xml

<application
......
......
android:networkSecurityConfig="@xml/network_security_config">

Ответ 20

Я использую Windows 10 в качестве своей платформы разработки, доступ к 10.0.2.2:port в моем эмуляторе не работает должным образом, и такой же результат для других решений в этом вопросе.

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

Вы должны запустить эмулятор через командную строку, как показано ниже:

 emulator.exe -avd <emulator_name> -writable-system

Затем в эмуляторе вы можете получить доступ к службе API, работающей на хост-компьютере, используя IP-адрес локальной сети и порт привязки:

http://192.168.1.2:<port>

Надеюсь, что это помогает вам.

О запуске эмулятора из командной строки: https://developer.android.com/studio/run/emulator-commandline.

Ответ 21

Вы можете найти нужный IP-адрес в диспетчере задач Windows (нажав Ctrl + Alt + Del), просмотрев его на вкладке "Производительность". , ,

Ответ 22

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