Erreichen eines Netzwerkgeräts per IP und Port mithilfe des Android-Emulators

8

Warum meine Java-App für Android nicht mit dem Server verbinden?

Ich führe die Anwendung in Android Emulator, und der Server mit 9999 und Host 127.0.0.1 in meinem PC, aber nur nicht verbinden und ich denke, diese Methode ist nicht gut für Android-App.

Update: Ich arbeite mit API 8 ... Android 2.2!

Es ist Arbeit gut! ! Danke an alle;)

Es ist mein Quellcode:

%Vor%     
FredVaz 19.11.2011, 01:39
quelle

2 Antworten

17

Siehe hier :

Hostcomputer kann über die IP-Adresse 10.0.2.2 vom Emulator erreicht werden.

** Bearbeiten, beantworten Sie Ihren Kommentar: *

Zur Vollständigkeit und zum besseren Verständnis meiner Antwort lesen Sie die Android Emulator-Dokumentation .

Dies sind die IP-Adressen, die vom Emulator erreicht werden :

  • 10.0.2.1 , Router / Gateway-Adresse.
  • 10.0.2.2 , Spezieller Alias ​​für Ihre Host Loopback-Schnittstelle (d. h. 127.0.0.1 auf Ihrem Entwicklungscomputer)
  • 10.0.2.3 , Erster DNS-Server
  • 10.0.2.4 / 10.0.2.5 / 10.0.2.6 , Optionaler zweiter, dritter und vierter DNS-Server (falls vorhanden)
  • 10.0.2.15 , Die emulierte Geräteeigene Netzwerk- / Ethernet-Schnittstelle
  • 127.0.0.1 , Die emulierte Geräteeigene Loopback-Schnittstelle

Das heißt, wir haben:

  • Häufiger Fehler 1: Zugreifen auf 127.0.0.1 vom Emulator, der versucht, den Hostcomputer zu erreichen. Benutze 10.0.2.2 , wie ich schon sagte.
  • Allgemeiner Fehler 2: Der Versuch, auf einen Emulatorservice auf HostComputerIP:appServicePort zuzugreifen. Es wird nicht funktionieren, da Ihr Host-Computer selbst (Windows, Linux, OS usw.) keinen Dienst in diesem Port ausführt. Sie müssen einen Port auf der Emulator Konsole an einen Port auf einer emulierten Android-Instanz selbst umleiten (siehe 2).

Gemeinsame Netzwerkanforderungen:

1- Emulator-App als Client und lokaler Computer als Server

Da der Emulator NAT ist, glaube ich, dass Sie sich direkt mit jedem Computer in Ihrem lokalen Netzwerk verbinden können. Ich meine, da der virtuelle Router Zugriff auf beide Netzwerke hat, sollte er in der Lage sein, ausgehende Verbindungen (d. H. Emulator- & gt; real lan) problemlos zu verarbeiten.

Beispiel: in meinem Netzwerk (192.168.0.x), ich kann von den Emulator mit meinem echten Router verbinden ( 192.168.0.254 ) zeigt den Emulator-Webbrowser nur auf http://192.168.0.254:port . Ich benutze verschiedene Dienste (hail to Tomato!), Und ich kann alle auf jedem port zugreifen. Port-Forwarding nicht erforderlich, wie erwartet .

Nach dem Aussehen Ihres Codes glaube ich, dass Sie Folgendes brauchen:

%Vor%

2- Lokaler Computer als Client- und Emulator-App als Server

Nun, das ist eine andere Geschichte. Sie müssen Portumleitungen auf dem virtuellen Router einrichten. Der einfachste Weg ist:

Telnet in das "Management" -System (dies ist nicht der Emulator), von Ihrem Host (Ihr Computer, Konsole auf Linux oder Eingabeaufforderung unter Windows):

%Vor%

Danach verwenden Sie:

%Vor%

Danach können Sie einen Dienst auf emulatorPort einrichten, und Sie können sich von Computern im lokalen Netzwerk aus mit ihm verbinden, indem Sie auf hostComputerIP:localPort zugreifen.

So verwenden Leute (einschließlich mir) beispielsweise SSHDroid in einem Emulator.

Sonst noch etwas?

    
davidcesarino 19.11.2011, 02:44
quelle
2

127.0.0.1 geht an localhost. Während das von Ihrem PC aus Ihr eigener Computer ist, ist es das Telefon vom Telefon aus. Sie müssen die tatsächliche IP-Adresse angeben. Stellen Sie außerdem sicher, dass Sie die Internetberechtigung anfordern, wenn Sie es nicht bereits festgelegt haben. Weitere Informationen finden Sie in den Dokumentationsberechtigungen und dieser andere SO-Beitrag .

Aktualisierung: Um Ihren Kommentar zu beantworten, wie David aus dem Emulator hervorhebt, können Sie 10.0.2.2 verwenden, um Ihren Hostcomputer zu erreichen.

    
kabuko 19.11.2011 01:45
quelle

Tags und Links