2015-06-19 6 views
14

Non riesco a raggiungere il server Android sull'emulatore da un programma sul desktop, come posso risolverlo?Socket per server Android

Alcuni codice (da How to find LAN ip address of android device?):

public static ArrayList<String> getSelfIP(){ 
    try { 
     ArrayList<String> ipList = new ArrayList<>(); 
     for (Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces(); en.hasMoreElements();) { 
      NetworkInterface intf = en.nextElement(); 
      for (Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses(); enumIpAddr.hasMoreElements();) { 
       InetAddress inetAddress = enumIpAddr.nextElement(); 
       if (!inetAddress.isLoopbackAddress()) { 
        ipList.add(inetAddress.getHostAddress().toString()); 
       } 
      } 
     } 

     return ipList; 
    } catch (SocketException ex) {} 
    return null; 
} 

Il risultato è [fe80::5054:ff:fe12:3456%eth0, 10.0.2.15]

Cosa devo configurare o fare per rendere l'emulatore raggiungibile con i miei programmi per il desktop?

Ho fatto quanto segue:

> adb forward tcp:50000 tcp:50000

tuttavia, sono in grado di accedere al server tramite localhost: 50000.

+0

Perché così difficile? Vedi qui: http://developer.android.com/tools/devices/emulator.html Ma molto più facile è usare un dispositivo reale. – greenapps

+0

Ho aggiornato la domanda con il comando ADB di inoltro, che non sembra funzionare. – user3635998

+0

Quale ip e port usi per connetterti al server sull'emulatore? Su quale porta il tuo server è in ascolto? – greenapps

risposta

4

Provare a utilizzare l'indirizzo IP 10.0.2.2.

E 'l'alias speciale al vostro ospite di loopback di interfaccia (cioè 127.0.0.1 sul computer di sviluppo)

1

Date un'occhiata a this documentazione Android, Sezione "Utilizzo di Network reindirizzamento".

Impostazione reindirizzamento attraverso l'istanza

Ogni emulatore Emulatore Console fornisce una console di controllo è possibile collegarsi a , per impartire comandi specifici per tale istanza. È possibile utilizzare il comando console redir per impostare il reindirizzamento, se necessario, per un'istanza dell'emulazione .

Prima di tutto, determinare il numero di porta della console per l'istanza dell'emulazione di destinazione . Ad esempio, il numero di porta console per la prima istanza emulatore lanciato è 5554. Quindi, collegare alla console dell'istanza dell'emulatore bersaglio , specificandone il numero di porta console, come segue:

telnet localhost 5554

volta connesso , utilizzare il comando redir per eseguire con il reindirizzamento. Per aggiungere un reindirizzamento, uso:

add <protocol>:<host-port>:<guest-port>

dove <protocol> è o tcp o UDP, e <host-port> e <guest-port> imposta la mappatura tra il propria macchina e il sistema emulato, rispettivamente.

Ad esempio, il seguente comando imposta un reindirizzamento che gestisce tutte le connessioni TCP in entrata al vostro ospite (sviluppo) macchina su 127.0.0.1:5000 e li passerà per il 10.0.2 sistema emulato.15: 6000:

redir add tcp:5000:6000

Nel tuo caso l'ultimo comando sarebbe

redir add tcp:5000:5000 
0

ho avuto questo problema una volta, utilizzare 10.0.2.2 indirizzo ip che dovrebbe risolvere il problema.