1 votos

Conectar dispositivo Android al servidor en el emulador

Antecedentes

He estado buscando en AE, SO y Google durante muchas horas y he encontrado muchos ejemplos de personas que quieren conectar su PC al emulador. También me he encontrado con algunos que desean conectar su dispositivo a su servidor en un PC. Quiero conectar mi dispositivo, a un emulador que se encuentra en funcionamiento en un PC. He probado los ejemplos dados en la documentación pero todavía no he logrado que funcione.

Me gustaría que mi dispositivo (un dispositivo real, Nexus 7) creara un punto de acceso al cual mi PC esté conectado. En el PC, hay un emulador en funcionamiento que tiene un socket abierto en el puerto 40000. Estoy recibiendo errores de ECONNREFUSED al intentar conectar mi dispositivo al emulador. Esto es lo que estoy haciendo:

Conexión del dispositivo al emulador (a través del PC)

El dispositivo intenta crear una conexión de Socket con el emulador a través del PC. La IP de mi PC es 192.168.43.198, por lo que es la IP de destino que el dispositivo utiliza. Sin embargo, la conexión falla con un mensaje de ECONNREFUSED.

Reenvío usando ADB y telnet

En el PC he intentado reenviar el puerto 40000 al emulador usando:

adb forward tcp:40000 tcp:40000

y

redir add tcp:40000:40000

sobre telnet hacia el emulador.

Cuando ejecuto el comando adb forward, obtengo un puerto de escucha en el PC de la siguiente manera:

TCP 127.0.0.1:40000 0.0.0.0:0 LISTENING.

Observa que la IP de escucha es 127.0.0.1.

Cuando ejecuto el comando redir, no puedo ver ningún puerto de escucha usando netstat.

Prueba de conexión desde el dispositivo al PC

Para probar las "partes" de la conexión, he utilizado SocketTest (http://sourceforge.net/projects/sockettest/) en mi PC.

Si lo utilizo como servidor, escuchando en el puerto 40000. Entonces mi dispositivo se conecta a él sin problemas usando 192.168.43.198:40000.

Prueba de conexión desde el PC al emulador

Cuando uso SocketTest como cliente para conectarme a 127.0.0.1:40000, también se conecta correctamente al emulador.

Sin embargo, al utilizar la IP externa: 192.168.43.198, ¡SocketTest también recibe una conexión rechazada!

Posibles problemas

Me parece que mi PC no se da cuenta de que debería enrutar 192.168.43.198:40000 a 127.0.0.1:40000 a pesar de que los comandos que he ingresado afirman hacerlo en la documentación (http://developer.android.com/tools/devices/emulator.html#redirection y http://developer.android.com/tools/help/adb.html#forwardports)

El firewall está apagado.

2voto

Chris Roberts Puntos 7543

El problema aquí es que el reenvío de ADB se conecta a la interfaz de bucle local (127.0.0.1), y no tienes un reenvío desde la interfaz LAN (192.168.43.198) a la interfaz de bucle local. El método que puedes usar para lograr esto depende de tu plataforma. No sé qué podrías usar en Windows, pero en Linux puedes usar rinetd y en OSX puedes usar ipfw

LINUX:

Agrega las siguientes líneas a tu /etc/rinetd.conf:

# bindaddress    bindport  connectaddress  connectport
192.168.43.198   40000     127.0.0.1       40000

Luego reinicia rinetd con service rinetd restart o /etc/init.d/rinetd restart.

OSX:

ipfw add fwd 127.0.0.1,40000 tcp from any to 192.168.43.198 dst-port 40000

PreguntAndroid.com

PreguntAndroid es una comunidad de usuarios de Android en la que puedes resolver tus problemas y dudas.
Puedes consultar las preguntas de otros usuarios, hacer tus propias preguntas o resolver las de los demás.

Powered by:

X