Erreichen Sie ein Netzwerk-Gerät, indem Sie IP und port mit dem Android-emulator
Warum meine java-app für android nicht mit server verbinden ?
Ich führen Sie die Anwendung in android-emulator, und die server-welcher port 9999 und host 127.0.0.1 in meinem pc, aber eben nicht verbinden und ich denke, diese Methode ist nicht gut für die android-app.
Update: ich habe die Arbeit mit API 8 ... Android 2.2 !
Es ist die Arbeit Gut ! ! Vielen Dank an alle 😉
Es ist mein source code:
import android.app.Activity;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
//Java imports
//import android.util.Log;
import java.io.*;
import java.net.*;
import java.util.*;
import java.util.logging.Level;
import java.util.logging.Logger;
public class MainActivity extends Activity{
//Variaveis Interface
private Button ligar;
private Button enviar;
private EditText text1;
private TextView text2;
//Variaveis
static Socket cSocket;
static PrintWriter out;
static BufferedReader in;
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState){
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
//Declaração butões
ligar = (Button) findViewById(R.id.ligar);
enviar = (Button) findViewById(R.id.enviar);
text1 = (EditText) findViewById(R.id.text1);
text2 = (TextView) findViewById(R.id.text2);
//Interacao
ligar.setOnClickListener(new OnClickListener(){
public void onClick(View arg0){
connect();
}
});
enviar.setOnClickListener(new OnClickListener(){
public void onClick(View arg0){
out.println("Hello");
text2.setText("");
}
});
}
//Outras Funcoes
public void connect(){
//Funcao ligar
cSocket = null;
out = null;
in = null;
try{
cSocket = new Socket("10.0.2.2",4444);
out = new PrintWriter(cSocket.getOutputStream(), true);
in = new BufferedReader(new InputStreamReader(cSocket.getInputStream()));
text2.setText("Estas conectado com sucesso.");
}
catch (IOException ex) {
//Logger.getLogger(client.class.getName()).log(Level.SEVERE, null, ex);
text2.setText("Erro! Na conexão");
}
}
//
}
- Vergessen Sie nicht, markieren Sie die Antwort, wie angenommen, oder posten Sie Ihre eigenen Lösung (im Falle der nachfolgenden Antworten trifft nicht Ihr problem lösen), und bestätigen Sie es. Wenn Sie Ihr problem lösen, Sie sollten "finalize" die Frage, die das markieren einer Antwort als "akzeptiert".
Du musst angemeldet sein, um einen Kommentar abzugeben.
Siehe hier:
Host-Computer erreichen Sie mithilfe der IP-Adresse
10.0.2.2
vom emulator.**edit, Antwort auf deinen Kommentar:*
Vollständigkeit halber und zum besseren Verständnis meiner Antwort, Lesen Sie die Android-Emulator-Dokumentation.
Diese sind die IP-Adressen als mit dem emulator:
10.0.2.1
, Router/gateway-Adresse.10.0.2.2
Spezielle alias zu Ihrem host loopback-interface (also die 127.0.0.1 auf Ihre Entwicklung Maschine)10.0.2.3
, Ersten DNS-server10.0.2.4
/10.0.2.5
/10.0.2.6
, Optional zweite, Dritte und vierte DNS-server (wenn vorhanden)10.0.2.15
, Die emuliert Gerät die eigene Netzwerk - /ethernet-Schnittstelle127.0.0.1
, Die emuliert Gerät die eigene loopback-SchnittstelleDas heißt, wir haben:
127.0.0.1
aus dem emulator versuchen zu erreichen, Ihre host-Maschine. Verwenden10.0.2.2
, wie ich sagte.HostComputerIP:appServicePort
. Es wird nicht funktionieren, da Ihr host-computer (Windows, Linux, OS etc.) nicht läuft ein Dienst im Hafen. Sie müssen so leiten Sie einen port auf dem emulator Konsole auf einen port auf einem emulierten Android-Instanz selbst (siehe 2 unten).Gemeinsamen networking-Bedürfnisse:
1 - Emulator-app als client und dem lokalen computer als server
Weil der emulator ist NAT, ich glaube, Sie können eine Verbindung zu einem beliebigen computer in Ihrem lokalen Netzwerk direkt. Ich meine, da die virtuellen router hat Zugriff auf beide Netzwerke, es sollte in der Lage sein zu handhaben ausgehende (D. H., emulator->echte lan) - verbindungen einwandfrei.
Beispiel: auf mein Netzwerk (192.168.0.x), ich kann eine Verbindung von den emulator auf meine real router (
192.168.0.254
) einfach auf dem emulator, web browser, umhttp://192.168.0.254:port
. Ich benutze verschiedene Dienste auf (Heil-Tomaten!), und ich kann auf alle von Ihnen auf jedenport
. Keine Notwendigkeit, zu behandeln, port-Weiterleitung, wie erwartet.Durch die Blicke deinen code, ich glaube, Sie brauchen:
2 - Lokaler Rechner als client und emulator-app, die als server -
Nun, das ist eine andere Geschichte. Sie müssen setup port-Umleitungen auf die virtuellen router. Der einfachste Weg ist:
Telnet in der "management" - system (dies ist nicht der emulator), von Ihrem host (Ihre computer, die Konsole, die auf linux oder die Eingabeaufforderung unter Windows):
Danach, Verwendung:
Nachdem dieser, werden Sie in der Lage, einen service auf
emulatorPort
und Sie werden in der Lage sein, um verbinden von Computern im lokalen Netzwerk durch den Zugriff aufhostComputerIP:localPort
.Dies ist die Art, wie Menschen (mich eingeschlossen) verwenden, zum Beispiel, SSHDroid innen ein emulator.
Etwas anderes?
127.0.0.1 geht, localhost. Wenn Sie Ihren eigenen computer von Ihrem PC, es ist das Telefon von der Telefon. Müssen Sie die tatsächliche IP-Adresse. Darüber hinaus, wenn Sie haven ' T bereits, stellen Sie sicher, verlangen Sie die Internet-Berechtigung. Finden Sie die doc-Berechtigungen und diese anderen SO posten.
Update:
Zu beantworten, Ihr Kommentar, als David Punkte aus den emulator, den Sie verwenden können
10.0.2.2
erreichen Sie Ihre host-Maschine.