node - No se puede usar ServerSocket en Android
socket io tutorial (3)
Estoy tratando de escuchar en un puerto usando ServerSocket
en un dispositivo Android. Quiero poder conectarme a este puerto a través de WiFi usando una computadora en la misma red.
No me sale una excepción cuando lo conecto a un puerto, sin embargo cuando miro netstat dice:
Proto Recv-Q Send-Q Local Address Foreign Address State
tcp 0 0 (null):4040 (null):* LISTEN
He intentado innumerables formas de vincularlo a localhost, 0.0.0.0, la dirección IP WiFi LAN del dispositivo con SocketInetAddress
y InetAddress.getByName
. Nada parece funcionar.
Cuando trato de conectarme al puerto desde una computadora en el mismo WiFi (he probado Netcat y Java''s Socket.connect()
), todo lo que puedo ver en Wireshark es una solicitud ARP:
Who has [phone''s LAN address]? Tell [computer LAN address].
Esta solicitud se repite hasta que se agota el tiempo de espera.
Lo he intentado de forma inversa, al configurar ServerSocket en la computadora y conectarse a ese puerto desde el teléfono, eso funciona muy bien.
Mi teléfono de prueba es un Samsung Spica i5700 con una ROM personalizada.
¿Algunas ideas?
Editar: El código es simple como este:
ServerSocket server = new ServerSocket();
server.setReuseAddr(true);
server.setTimeout(0);
server.bind(new InetSocketAddress(4040));
Socket client = null;
while((client = server.accept()) == null);
// Connected
enter code here
enter code here
Pude hacer que esto funcionara al usar
ServerSocket server = new ServerSocket( myTcpPort, 0, addr );
donde addr = InetAddress de su teléfono. De lo contrario, solo parece enlazar a localhost (127.0.0.1). Además, estoy usando el puerto 8080.
En lugar de usar server.bind, intente inicializar el socket del servidor de esta manera: server = new ServerSocket (4040);
Además, server.accept () bloqueará hasta que se establezca una conexión, por lo que no necesita ese ciclo while (consulte: http://download.oracle.com/javase/1.5.0/docs/api/java/ net / ServerSocket.html # accept ())
Tuve problemas con esto también y solo pude conectarme a mi servidor Android al usar:
ServerSocket myServerSocket = new ServerSocket();
String hostname = getLocalIpAddress();
myServerSocket.bind(new InetSocketAddress(hostname, myPort));
Donde el nombre de host era la IP local, que obtuve usando la función getLocalIpAddress () desde esta página:
https://github.com/Teaonly/android-eye/blob/master/src/teaonly/droideye/MainActivity.java