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% 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:
127.0.0.1
vom Emulator, der versucht, den Hostcomputer zu erreichen. Benutze 10.0.2.2
, wie ich schon sagte. 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?
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.