Dostęp do lokalnego hosta komputera z urządzenia mobilnego z systemem Android podłączonego przez USB

86

Mam urządzenie z Androidem (karta Samsung Galaxy) podłączone do mojego komputera przez USB.

Chcę korzystać z usług sieci Web i uruchomić stronę internetową, która znajduje się na moim lokalnym serwerze Xampp na moim komputerze z systemem Android.

Mogę to osiągnąć, jeśli mam zarówno komputer, jak i urządzenie z Androidem, podłączone do tej samej sieci bezprzewodowej.

Jednak jest możliwy dostęp do strony localhost bez połączenia bezprzewodowego, używając tylko połączenia USB.

(PS: ten sam scenariusz działa, gdy uruchamiam aplikację na emulatorze i używam adresu IP 10.0.2.2, aby uzyskać dostęp do hosta lokalnego na moim komputerze)

saurabh
źródło
Proszę skorzystać z poniższego linku stackoverflow.com/questions/4779963/… To zadziałało dla mnie.
1
Wyłącz zaporę ogniową podczas testowania strony internetowej lub dodaj swój adres IP do zaufanych sieci w ustawieniach zapory.
zeeali
szczegóły na blogu mycodingchannel.in/blog/ ...
kontashi35

Odpowiedzi:

34

W końcu rozwiązałem ten problem. Korzystałem z Samsunga Galaxy S z Froyo. „Port” poniżej to ten sam port, którego używasz dla emulatora (10.0.2.2:port). Co ja zrobiłem:

  1. najpierw podłącz swoje prawdziwe urządzenie kablem USB (upewnij się, że możesz przesłać aplikację na swoje urządzenie)
  2. uzyskaj adres IP z podłączanego urządzenia, zaczynający się od 192.168.xx: port
  3. otwórz „Centrum sieci i udostępniania”
  4. kliknij na „Połączenie lokalne” w urządzeniu i wybierz „Szczegóły”
  5. skopiuj „adres IPv4” do swojej aplikacji i zamień go na przykład: http://192.168.x.x:port/test.php
  6. prześlij swoją aplikację (ponownie) na swoje prawdziwe urządzenie
  7. przejdź do właściwości i włącz „Tethering przez USB”
  8. uruchom aplikację na urządzeniu

Teraz powinno działać.

Zsivics Sanel
źródło
Jeśli to zrobię, otrzymam nieznany wyjątek hosta.
AaronF
4
Wydaje się, że ta odpowiedź, choć działa, zakłada, że ​​urządzenie z Androidem i komputer są połączone z bezprzewodowym punktem dostępowym, co jest sprzeczne z tym, co stara się osiągnąć autor.
Jacob
2
Należy zauważyć, że jest to rozwiązanie tylko dla systemu Windows.
dotnetCarpenter
2
Zgadzam się z @Jacob, to nie odpowiada na pytanie. Samo pytanie mówi, że może łączyć się przez Wi-Fi.
bradlis7
1
To nie odpowiada na pytanie. To jest właściwa odpowiedź: stackoverflow.com/a/53920173/2947592
wvdz
44

Google opublikował rozwiązanie dla tego rodzaju problem tutaj .

Kroki:

  • Połącz urządzenie z Androidem i maszynę deweloperską z włączonym debugowaniem USB
  • Otwórz Chrome na swoim komputerze deweloperskim, otwórz nową kartę, kliknij prawym przyciskiem myszy na nowej karcie przeglądarki, kliknij Sprawdź
  • Kliknij ikonę trzech kropek w prawym górnym rogu trzy kropki, -> Więcej narzędzi, Urządzenia zdalne.
  • Spójrz na dół ekranu, upewnij się, że nazwa Twojego urządzenia jest wyświetlana na liście z zieloną kropką.
  • Spójrz poniżej na część ustawień, zaznacz znak przekierowania portów
  • Dodaj regułę. Na przykład, jeśli twój serwer WWW Pythona działa na twoim komputerze localhost: 5000 i chcesz uzyskać do niego dostęp z portu urządzenia 3333, piszesz 3333w lewej części, wpisujesz localhost:5000i klikasz dodaj regułę.
  • Voila, teraz możesz uzyskać dostęp do serwera internetowego z urządzenia. Spróbuj otworzyć nową kartę przeglądarki i odwiedź adres http: // localhost: 3333 na swoim urządzeniu
Alfat Saputra Harun
źródło
Działa zgodnie z reklamą. Zachowaj również porty na urządzeniu i komputerze to samo jest możliwe :). (Nie jestem pewien, dlaczego chcesz użyć innego portu w urządzeniu)
Ralf de Kleine
To powinna być akceptowana odpowiedź. Jeśli używasz certyfikatu z podpisem własnym dla lokalnego dewelopera, pamiętaj, aby dodać protokół SSL w zakładce Nowa, np. Localhost: 5000 . Działa doskonale.
turrican_34
4
„Ten panel został wycofany i zastąpiony interfejsem chrome: // inspect / # devices, który ma taką samą funkcjonalność”. Więc po prostu wklej chrome://inspect/#devicesw chrome i przejdź do kroku przekierowania portów w odpowiedzi.
craastad
Właśnie spędziłem ponad godzinę, próbując dowiedzieć się, jak sprawić, by te instrukcje działały z ERR_EMPTY_RESPONSEpowrotem z Chrome na urządzeniu ... aż w końcu zdałem sobie sprawę, że nie mam swojego serwera localhost na moim komputerze i że nie ma co faktycznie połącz się z! No! Uruchomiłem serwer (w tym przypadku Apache) i wszystko od razu zaczęło działać. Pierwszym ważnym krokiem jest upewnienie się, że serwer docelowy faktycznie działa przed skonfigurowaniem przekierowania portu.
CubicleSoft
to najlepsze rozwiązanie
Raul Quispe
16

Czytałem wiele forów i próbowałem grać w aplikacje, ale do tej pory nie znalazłem rozwiązania.

Uważam, że mój scenariusz jest podobny do twojego, ale wyjaśnię, aby pomóc innym. Mam lokalnie hostowaną witrynę internetową i usługi internetowe, z których może korzystać moja aplikacja na Androida. Muszę mieć to działające w trasie do demonstracji tylko z moim laptopem i bez połączenia sieciowego.

Uwaga: Używanie mojego iPhone'a jako hotspotu Wi-Fi i łączenie zarówno mojego komputera, jak i urządzenia z Androidem działało, ale połączenie iPhone'a 4S jest powolne i regularnie przerywało.

Moje rozwiązanie jest następujące:

  • Odłącz kable sieciowe na komputerze i wyłącz Wi-Fi.
  • Wyłącz Wi-Fi na urządzeniu z Androidem
  • Podłącz Androida do komputera przez USB
  • Włącz „Tethering przez USB” w menu Androida. (W sieci-> więcej ...-> Tethering i przenośny punkt dostępu ")
  • Uzyskaj adres IP swojego komputera, który został przypisany za pomocą kabla USB. (otwórz wiersz polecenia i wpisz „ipconfig”, a następnie poszukaj adresu IP przypisanego przez kartę sieciową USB)
  • Otwórz przeglądarkę na komputerze, używając znalezionego adresu IP zamiast adresu lokalnego do przetestowania. to znaczyhttp://192.168.1.1/myWebSite
  • Otwórz przeglądarkę na Androidzie i sprawdź, czy działa
Jan
źródło
1
Mam Nexusa 10 i nie mogę sprawić, by działał dla mnie, ale bardzo go potrzebuję. Brak opcji tetheringu !?
Ludus H
Ja też mam problem w moto g5s plus. Nadal nie przypisuję pracy.
Jigar Fumakiya
5

Oto fragment kodu mojej aplikacji na Androida:

Ta aplikacja jest w stanie komunikować się z modelem pobierania postów HTTP między serwletem działającym na serwerze a urządzeniem z Androidem podłączonym w trybie debugowania USB ( ponieważ aplikacja była w trakcie opracowywania ).

Mogę również uruchomić aplikację przez Wi-Fi, gdy serwer Tomcat Apache 7 działa ( po zakończeniu tworzenia aplikacji ).

wprowadź opis obrazu tutaj

Aby uzyskać Twój adres IP

  1. Przejdź do wiersza polecenia
  2. Rodzaj ipconfig
  3. Wciśnij Enter

Na liście Adres IPv4 to Twój adres IP.

cagcak
źródło
To jest niedokładne. Tryb debugowania USB nie zapewnia połączenia sieciowego, a przekazywanie ADB nie pozwala urządzeniu na kontakt z komputerem. Wygląda na to, że korzystasz z połączenia sieciowego przez USB zapewnionego przez narzędzie tetheringu, a nie debugowanie USB. Inną opcją jest tunelowanie ssh przez ADB do przodu.
Chris Stratton,
Nie chodziło mi o to, że tryb debugowalny przez USB zapewnia połączenie sieciowe. Ale niestety był to jedyny sposób na wykonanie niektórych poleceń wewnętrznych pochodzących z projektu aplikacji na Androida na serwer sieciowy osadzony w Android Studio. Dzięki za troskę, to może być mylące dla nowych programistów. Edytowany jako aplikacja w trakcie opracowywania w Android Studio.
cagcak
Wciąż nie ma tu odpowiedzi , która zapewni metodę osiągnięcia łączności w tym kierunku. „Tryb debugowania USB” tego nie robi, więc bez dokładnego opisu tego, jak to zrobiłeś, nie ma tutaj rozwiązania .
Chris Stratton
4

Zrobiłem to na komputerze z systemem Windows i zadziałało idealnie!

Włącz Tethering przez USB w telefonie komórkowym. Wpisz ipconfig w wierszu poleceń na swoim komputerze i znajdź ipv4 dla „połączenia lokalnego adaptera Ethernet x” (przeważnie pierwsze) Teraz przejdź do przeglądarki mobilnej, wpisz ipv4 z numerem portu aplikacji internetowej. np .: - 192.168.40.142:1342

Zadziałało przy tych prostych krokach!

Binu Jasim
źródło
4

Jak łatwo uzyskać dostęp do LocalHost na rzeczywistym urządzeniu z Androidem -> Połącz swój komputer z urządzeniem z systemem Android przez USB

  1. Przejdź do inspekcji Chrome i kliknij „f12” lub Control + Shift + C

Narzędzie Chrome Inspection

  1. Sprawdź spód chromowanego narzędzia inspekcyjnego.

  2. Teraz przejdź do ustawień w zakładce Remote Device.

Karta Urządzenia zdalne

  1. zaznacz opcję „Discover USB Device” oraz opcję „Port Forwarding”.

  2. Teraz kliknij Dodaj reguły, wprowadź dowolny port urządzenia, np. (4880), aw polu Adres lokalny wprowadź rzeczywisty adres lokalnego hosta w moim przypadku, np. (127.0.0.1:480)

  3. Po dodaniu reguły przejdź do swojego studia Android -> wewnątrz adresu URL kodu ( http://127.0.0.1:4880 ). Pamiętaj, aby zmienić port z 480 -> 4880.

  4. Przejdź do zakładki Remote Device w Chrome i kliknij podłączone urządzenie. Dodaj nowy adres URL (127.0.0.1:4880) Sprawdź przeglądarkę Chrome na urządzeniu z Androidem

Sprawdź przeglądarkę Chrome na rzeczywistym urządzeniu i rozpocznij debugowanie kodu na rzeczywistym urządzeniu z Androidem.

kader hussain
źródło
1

Sprawdź opcje typu połączenia USB. Powinieneś mieć jeden o nazwie „przepustka do Internetu”. Umożliwi to telefonowi korzystanie z tego samego połączenia co komputer.

codemonkey
źródło
To jedyny znany mi sposób korzystania z połączenia komputera przez USB. Więc jeśli chodzi o twoje urządzenie, myślę, że odpowiedź brzmi: nie. Symulator działa, ponieważ współdzieli połączenie z komputerem.
codemonkey
Wiem, że nowe urządzenia HTC z Sense 3 mają opcję (Ex the Sensation)
codemonkey
wielkie dzięki za pomoc. nadal sprawdzić, czy któraś z opcji działa.
saurabh
1

Bardzo podobała mi się odpowiedź Johna, ale chciałbym ją wprowadzić z pewnymi zmianami dla tych, którzy chcą przetestować konfigurację klient / serwer, uruchamiając TCP klienta na telefonie komórkowym podłączonym przez USB i serwer na lokalnym komputerze.

Po pierwsze, jest całkiem oczywiste, że 10.0.2.2 nie będzie działać, ponieważ jest to PRAWDZIWY telefon komórkowy ze sprzętem, a nie symulator.

Więc postępuj zgodnie z instrukcjami Johna:

  • Odłącz wszystkie kable sieciowe na komputerze i wyłącz Wi-Fi.
  • Wyłącz Wi-Fi na urządzeniu z Androidem
  • Podłącz urządzenie z systemem Android do komputera przez USB
  • Włącz opcję „Tethering przez USB” (Modem USB / Modem USB / USB שימוש כמודם סלולרי) w menu Androida. (W sieci-> więcej ...-> Tethering i przenośny punkt dostępu ")

    • To połączenie USB będzie działać jako serwer DHCP dla pojedynczego połączenia z komputerem, więc przypisze komputerowi dedykowany (dynamiczny) adres IP w lokalnej sieci USB. Teraz wszystko, co musisz zrobić, to podać aplikacji klienckiej ten adres IP i port.
  • Uzyskaj adres IP komputera (przypisany przez kabel USB) (otwórz wiersz polecenia i wpisz „ipconfig”, a następnie poszukaj adresu IP przypisanego przez kartę sieciową USB, w systemie Linux ifconfiglub Ubuntu „Informacje o połączeniu” itp. ..)

  • Poinformuj aplikację, aby łączyła się z tym adresem IP (tj. 192.168.42.87) za pomocą czegoś takiego jak (Java - strona klienta):

    String        serverIP      = "192.168.42.87";
    int           serverPort    = 5544;
    InetAddress   serverAddress = InetAddress.getByName(serverIP);
    Socket        socket         = new Socket(serverAddress, serverPort);
    ...
    

    Cieszyć się..

JamesC
źródło
1

Witaj, możesz uzyskać dostęp do swojego lokalnego hosta xampp przez

  1. Panel sterowania ->
  2. zapora ogniowa Windows Defender ->
  3. Ustawienia zaawansowane (po lewej stronie) -> Reguły przychodzące -> Nowa reguła -> Port -> w określonym porcie lokalnym wpisz porty Apache -> następny -> następnie możesz uzyskać dostęp do hosta lokalnego za pomocą lokalnego komputera Adres IP:
user3285339
źródło
0

Podłączanie telefonu Android za pomocą kabla USB i dostęp do serwera http na komputerze.

  1. Zapora ogniowa - wyłącz ją, gdy wszystko zadziała, możesz dodać regułę pod regułami przychodzącymi, włączyć serwer Apache HTTP (UDP i TCP) (lub dowolny serwer HTTP, z którego korzystasz) Ostrzeżenie - jeśli wyłączysz zaporę, komputer stanie się podatny na ataki do ataków internetowych. Dlatego najpierw wyłącz internet i odłącz się od sieci. Nie musisz być w Internecie, aby to zadziałało, ponieważ łączysz dwa urządzenia w sieci lokalnej.

  2. Podłącz kabel USB. Jeśli pojawi się okno sieci, wybierz Sieć domowa. Jeśli się nie wyskakuje, prawdopodobnie jest ustawiony na Publiczny (co nie zadziała), więc przejdź do: Panel sterowania \ Sieć i Internet \ Centrum sieci i udostępniania (w win7) i ustaw tam sieć domową. Może wyświetlić następny ekran po naciśnięciu go w celu udostępnienia zdjęć, muzyki ... po prostu kliknij anuluj. Na ekranie głównym Sieć domowa będzie nadal aktywna.

  3. Potrzebujesz adresu IP komputera, lokalnego hosta lub innych aliasów, które nie działają. Aby uzyskać adres IP swojego komputera, uruchom powłokę wiersza poleceń systemu Windows (naciśnij klawisz Windows + R i wpisz cmd), powinno pojawić się czarne okno wiersza poleceń, wpisz: "ipconfig" i naciśnij enter. Teraz poszukaj

Adres IPv4. . . . . . . . . . . : 192.168. ###. ### To adres IP przypisany przez telefon do komputera

  1. Teraz powinieneś skończyć, w przeglądarce telefonu spróbuj uzyskać dostęp do testowego pliku html z serwera komputera, który powinien wyświetlić się dobrze.

  2. Teraz, gdy wszystko działa, prawdopodobnie będziesz chciał włączyć zaporę ogniową i dostęp do Internetu na swoim komputerze. Teraz spróbuj ponownie uzyskać dostęp do serwera http. To prawdopodobnie nie zadziała. W zależności od konfiguracji możesz otrzymać wyskakujące okienko z prośbą o dodanie reguły, aby na to zezwolić, ale jeśli nie, po prostu dodaj ją samodzielnie. Uruchom zaporę systemu Windows i przejdź do Reguł przychodzących (ponieważ jest to serwer) i dodaj nową regułę. Wybierz „Program”. Zlokalizuj exe swojego serwera http i na następnym ekranie upewnij się, że wybrana jest opcja Zezwalaj. Spróbuj połączyć się ponownie, a teraz powinno działać. Jeśli nie, to prawdopodobnie dlatego, że wybrałeś zły exe. Możesz nawet przejść bardziej zaawansowane, aby ograniczyć korzystanie z zewnątrz (ponieważ teraz każdy w Internecie może uzyskać do niego dostęp, jeśli ma Twój internetowy adres IP) .Aby ograniczyć dostęp, możesz kliknąć prawym przyciskiem myszy nowo utworzoną regułę,

    Uwaga dla programistów Androida: teraz w kodzie Androida musisz użyć „http: //”, w przeciwnym razie to nie zadziała. Na przykład: MyAsyncTask.execute („http://192.168.123.123/test.html”)

Część II - Ustawianie adresu IP na stały / statyczny.

Teraz, gdy wszystko działa, za każdym razem, gdy odłączasz kabel i podłączasz go ponownie, Twój adres IP ulegnie zmianie. A jeśli używasz go gdzieś w kodzie, będziesz musiał go aktualizować za każdym razem! Rozwiązanie, które wymyśliłem, to ustawienie statycznego adresu IP.

  1. Mając telefon podłączony i spętany, wróć do Centrum sieci i udostępniania i kliknij połączenie Lokalne „Połączenia:”

zrzut ekranu

  1. Na następnym ekranie wybierz Właściwości, a następnie podświetl IP 4 i naciśnij tam właściwości i kliknij „Użyj następującego adresu IP”
  2. Umieść domyślną bramę i maskę podsieci dokładnie tak, jak w ipconfig, a dla adresu IP zmień tylko ostatnie 3 cyfry na dowolne z zakresu od 1 do 255

zrzut ekranu

Ten adres IP będzie nowym stałym / statycznym adresem IP i pozostanie niezmieniony następnym razem, gdy podłączysz telefon.

Emil
źródło
0
  1. Upewnij się, że na komputerze jest zainstalowany adb , włączone debugowanie USB w telefonie , a telefon ma dostęp do komputera. Podłącz telefon do komputera kablem USB i upewnij się, że jest widoczny (powinien pojawić się w poleceniu Bash adb devices.
  2. W przeglądarce Chrome na komputerze otwórz chrome: // inspect / # devices , kliknij przycisk „Port forwarding”, zaznacz „Enable port forwarding” i dodaj port na komputerze, do którego chcesz mieć dostęp z telefonu ( szczegółowe instrukcje tutaj ). Musisz mieć otwartą kartę z uruchomionym chrome: // inspect / # devices.
  3. W przeglądarce telefonu przejdź do localhost: [numer_portu] i powinno wyświetlić wszystko, co jest uruchomione na komputerze.

Działa to w systemach Windows i Ubuntu Linux i powinno działać również na komputerach Mac.

Josh
źródło