Как я могу получить доступ к своему локальному хосту с моего устройства Android? - PullRequest
440 голосов
/ 24 января 2011

Я могу получить доступ к своему веб-серверу ноутбука с помощью эмулятора Android, я использую 10.0.2.2:portno, работает хорошо.

Но когда я подключаю свой настоящий телефон Android, браузер телефона не может подключитьсяна тот же веб-сервер на моем ноутбуке.Телефон подключен к ноутбуку с помощью USB-кабеля.Если я запускаю команду adb devices, я вижу свой телефон.

Что мне не хватает?

Ответы [ 34 ]

319 голосов
/ 24 января 2011

USB не обеспечивает сеть для мобильного устройства.

Если ваш рабочий стол и телефон подключены к одному и тому же WiFi (или любой другой локальной сети), используйте IP-адрес вашего рабочего стола, назначенный маршрутизатором (не localhost и не 127.0.0.1) ,

Чтобы узнать IP-адрес вашего рабочего стола:

  • введите в командной строке ipconfig (Windows) или ifconfig (Unix)
    • в Linux однострочник ifconfig | grep "inet " | grep -v 127.0.0.1 даст только важные вещи
    • есть куча предложений о том, как сделать похожий вывод в Windows
  • там будет куча IP
  • попробуйте все из них (кроме вышеупомянутых localhost и 127.0.0.1)

Если ваш телефон подключен к мобильной сети , то все будет сложнее.

Либо иди хардкор:

  • сначала определите внешний IP-адрес вашего маршрутизатора (https://www.google.de/search?q=myip)
  • затем, на маршрутизаторе, перенаправить порт на <your desktop IP>:<server port number>
  • наконец использовать внешний IP-адрес и перенаправленный порт

В противном случае используйте что-то вроде xip.io или ngrok .

194 голосов
/ 07 апреля 2013

Это на самом деле довольно просто.

  • Включите точку доступа WiFi вашего телефона / роутера Android и подключите Ноутбук на телефон
  • Запустите сервер на localhost (я использую WAMP-сервер для Windows)
  • Теперь откройте командную строку и введите
ipconfig

Как только вы это сделаете, вы увидите что-то вроде следующего:

Wireless LAN adapter Wireless Network Connection:
  Connection-specific DNS Suffix  . :
  Link-local IPv6 Address . . . . . : fe80::80bc:e378:19ab:e448%11
  IPv4 Address. . . . . . . . . . . : 192.168.43.76
  Subnet Mask . . . . . . . . . . . : 255.255.255.0
  Default Gateway . . . . . . . . . : 192.168.43.1
  • Скопируйте адрес IPv4 (в данном случае это 192.168.43.76)
  • В вашем мобильном браузере просто вставьте IPv4-адрес

Примечание: Пожалуйста, установите вашу сеть как " Домашняя сеть ". Установка сети в качестве домашней сети означает, что вы разрешаете своему ПК обмениваться данными с другими устройствами в той же сети ,

Если вы используете Windows 10, это можно сделать с помощью следующего:

  • Открыть Настройки
  • Перейти к Сеть и Интернет
  • Выберите WiFi в левом меню
  • Нажмите на название подключенного WiFi
  • Установите Сетевой профиль сети равным Личный

Если у вас возникла проблема, скорее всего, это связано с брандмауэром Windows.

  • Открыть Панель управления
  • Перейти к Брандмауэр Защитника Windows
  • Нажмите на Разрешить приложение или функцию через брандмауэр Защитника Windows
  • Проверьте, включено ли приложение для частных сетей (должна быть галочка)
  • Если он не включен, нажмите Изменить настройки и установите флажок под Личный для приложения
56 голосов
/ 15 октября 2013

Mac OS X пользователи

Я достиг этого, включив удаленное управление :

  • Убедитесь, что ваш телефон и ноутбук подключены к той же сети WiFi
  • На Mac перейдите к System preferences/sharing
  • Включить удаленное управление

Вы увидите сообщение, похожее на это:

  • Другие пользователи могут управлять вашим компьютером, используя адрес some.url.com

На вашем Android-устройстве теперь вы сможете перейти к some.url.com, который делегирует localhost на вашем Mac. Вы также можете использовать ifconfig, чтобы получить IP-адрес вашего Mac.


Переносимое решение с ngrok (любая ОС с Node.js)

Если вы не против выставить свой проект временным доменом, вы можете использовать ngrok. Допустим, у меня есть приложение, которое работает на localhost:9460 Я могу просто написать

npm install ngrok -g

ngrok http 9460

Это даст мне:

Session Status                online
Update                        update available (version 2.2.8, Ctrl-U to update)
Version                       2.2.3
Region                        United States (us)
Web Interface                 http://127.0.0.1:4040
Forwarding                    http://f7c23d14.ngrok.io -> localhost:9460
Forwarding                    https://f7c23d14.ngrok.io -> localhost:9460

Connections                   ttl     opn     rt1     rt5     p50     p90
                              0       0       0.00    0.00    0.00    0.00

Теперь я могу достичь https://f7c23d14.ngrok.io как способ удаленного просмотра localhost. Это здорово, когда вы делитесь дизайнерской работой или прогрессом с клиентами.


Альтернативный раствор с nginx проходом прокси

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

  • Включить удаленное управление (как упомянуто выше)
  • Временно настроить сервер на прослушивание через порт 81, в отличие от 80
  • Введите следующую команду:
sudo nginx -s reload
  • Визит http://youripaddress:81
server {
  listen 80;
  listen 81;   # <-------- add this to expose the app on a unique port
  server_name  ~^(local|local\.m).example.com$;
  # ...
}

Перезагрузите и посетите http://youripaddress:81

42 голосов
/ 17 октября 2017

С помощью простого решения (просто зайдите на laptop_ip_addr:port с мобильного устройства, когда мобильный и ноутбук подключены к одному и тому же WiFi), я получаю ошибку ERR_CONNECTION_REFUSED .То есть мой MacBook, похоже, отказывается от попытки подключения с моего мобильного телефона.


Обратное гнездо ADB (только для Android)

Это решение работает для меня (проверено)с MacBook):

  1. Подключите мобильное устройство Android с помощью USB-кабеля к ноутбуку
  2. Включить Отладка USB на мобильном устройстве
  3. На ноутбуке,запустите adb reverse tcp:4000 tcp:4000
    • Используйте свой номер порта вместо 4000
  4. Теперь на мобильном устройстве вы можете перейти к http://localhost:4000/, и он будетфактически подключается к ноутбуку, а не к мобильному устройству

См. инструкции здесь .

Недостатком является то, что это работает только с одним мобильным устройством за один раз .Если вы хотите получить доступ к другому мобильному устройству, вы должны сначала отключить первое (отключить USB-отладку ), подключить новое (включить USB-отладку ) и запустить adb reverse tcp:4000 tcp:4000снова.


ngrok (работает со всеми устройствами)

Другое решение, которое всегда должно работать, - ngrok (как упомянуто в других ответах).Он работает через Интернет, а не по локальной сети.

Крайне прост в использовании:

brew cask install ngrok
ngrok http 4000

Это выводит, помимо некоторой другой информации, строку типа

Forwarding                    http://4cc5ac02.ngrok.io -> localhost:4000

Теперь вы можете перейти к http://4cc5ac02.ngrok.ioна любом устройстве, подключенном к Интернету, и этот URL-адрес перенаправляет на localhost:4000 вашего ноутбука.

Обратите внимание, что пока выполняется команда ngrok (пока вы не нажмете Ctrl-C ), ваш проект публично обслуживается.Каждый, у кого есть URL, может увидеть его.

34 голосов
/ 12 мая 2013

На ПК с Windows Вам, возможно, не нужно ничего делать, кроме как узнать свой IPv4-адрес с помощью команды «ipconfig».

  • Шаг 1. Подключите телефон к ПК с помощью кабеля USB.
  • Шаг 2: Используйте команду 'ipconfig', чтобы узнать ваш IPv4-адрес (внешний IP-адрес маршрутизатора), например, 192.168.1.5 в моем случае.
  • Шаг 3: Просто откройте «192.168.1.5:8080»из браузера вашего телефона.Это работает!

Другие детали Env: Windows 7, Google Nexus 4 (4.2.2), Tomcat Server, приложение Grails.

Вы также должны убедиться, что у вас есть разрешениедля доступа в интернет в файле AndroidManifest:

<uses-permission android:name="android.permission.INTERNET"/>
34 голосов
/ 04 мая 2012

Я нашел быстрое решение этой проблемы.Попробуйте эту ссылку .Это должно помочь вам решить проблему.

Я изменил только одну вещь: в руководстве говорится, что вы изменяете «127.0.0.1» на «Все», вместо этого меняйте IP-адрес, на котором работает ваш сервер.

После этого вы сможете подключиться к своему локальному хосту.


Ниже (корректура) копия информации со связанной страницы:

Шаг 1

Установите сервер Wamp (или любой другой, который вы предпочитаете).

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

Загрузите и установите сервер Wamp отсюда.

Шаг 2

Добавьте новое правило для порта 80 вБрандмауэр Windows.

  1. Откройте панель управления и выберите Брандмауэр Windows.

  2. Выберите Дополнительные параметры на левой панели страницы настроек брандмауэра Windows.

  3. Выберите Inbound Rules на левой панели, затем выберите New Rule.

  4. Выберите Port и нажмите Next.

  5. Выберите переключатель «Определенные локальные порты» и введите 80 в качестве значения порта.

  6. Сохранить Разрешить соединение без изменений и перейти к следующему шагу.

  7. Оставьте параметры профиля без изменений и нажмите кнопку Далее.

  8. Дайте какое-нибудь красивое имя новому правилу и нажмите Готово.

Это позволит получить доступ к порту 80 по локальной сети.

Шаг 3

Редактировать файл httpd.confфайл сервера Wamp для исправления ошибки 403.

Нам нужно отредактировать этот файл.В противном случае мы получим ошибку 403 при доступе к локальному узлу через IP-адрес локальной сети.

  1. Нажмите на значок панели задач сервера Wamp.

  2. Откройте подменю сервера Apache.

  3. Выберите httpd.conf.

  4. Найдите этот раздел конфигурации в файле httpd.conf:

    Directory “c:/wamp/www/”
    #
    # Possible values for the Options directive are “None”, “All”,
    # or any combination of:
    # Indexes Includes FollowSymLinks SymLinksifOwnerMatch ExecCGI MultiViews
    #
    # Note that “MultiViews” must be named *explicitly* — “Options All”
    # doesn’t give it to you.
    #
    # The Options directive is both complicated and important. Please see
    # http://httpd.apache.org/docs/2.2/mod/core.html#options
    # for more information.
    #
    Options Indexes FollowSymLinks
    
    #
    # AllowOverride controls what directives may be placed in .htaccess files.
    # It can be “All”, “None”, or any combination of the keywords:
    # Options FileInfo AuthConfig Limit
    #
    AllowOverride all
    
    #
    # Controls who can get stuff from this server.
    #
    
    # onlineoffline tag – don’t remove
    Order Deny,Allow
    Deny from all
    Allow from 127.0.0.1
    

Найдите и замените «127.0.0.1» на «Все», сохраните файл и перезапустите сервер Wamp.

Шаг 4

Найдите IP вашей локальной сети.

  1. Откройте командную строку.

  2. Введите и введите команду ipconfig.

  3. В моем случае мой адрес локальной сети: 10.0.0.2.

Это IP-адрес, который необходим для доступа к локальному узлу на телефоне Android через Wi-Fi.,Чтобы проверить, работает ли он, введите этот IP-адрес в браузере на рабочем столе, где установлен сервер localhost.Браузер должен отобразить вашу локальную страницу успешно.Это гарантирует, что этот IP-адрес локальной сети теперь успешно доступен на вашем телефоне Android.

Я надеюсь, что это руководство поможет вам получить доступ к локальному хосту через Wi-Fi.

13 голосов
/ 01 марта 2012

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

11 голосов
/ 22 января 2014

Поскольку это старый вопрос, есть новый способ сделать это, который действительно очень прост. Загрузите расширение ADB Chrome и следуйте инструкциям:

https://developers.google.com/chrome-developer-tools/docs/remote-debugging

6 голосов
/ 01 мая 2015

"Переадресация портов в Chrome для Android упрощает тестирование сайта разработки на мобильном устройстве. Он работает путем создания прослушивающего TCP-порта на мобильном устройстве, который сопоставляется с определенным TCP-портом на компьютере разработчика. Трафик между этими портами перемещается через USB, поэтому соединение не зависит от конфигурации вашей сети. "

Подробнее здесь: https://developer.chrome.com/devtools/docs/remote-debugging#port-forwarding

5 голосов
/ 25 мая 2013

Возможно, ваш веб-сервер прослушивает ваш петлевой интерфейс, а не сетевой интерфейс.Основными признаками этого являются:

  • Хиты на 127.0.0.1 и localhost (с локального хоста или эмулятора Android), LAN или WAN

Я больше говорю о диагностике и исправлении этого в ответе здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...