Android se conecta al socket de conexión

Tengo 2 dispositivos androides, uno actúa como un servidor que está en el modo de conexión, y la aceptación de conexiones a un puerto. El otro dispositivo actúa como un cliente que se conecta al hotspot del servidor y establece una conexión al servidor a través de un puerto. (Todo se hace sin un enrutador en el medio).

El código del servidor se ve así: (Cuando el servidor androide ejecuta el código, el dispositivo está en modo de conexión)

ServerSocket server = new ServerSocket(PORT); while (true) { Socket client; client = server.accept(); ClientThread com = new ClientThread(client, this); Thread t = new Thread(com); t.start(); } 

El código de cliente se ve así: (cuando el cliente android ejecuta este código, el dispositivo está conectado al punto de acceso)

 Socket client = new Socket(); int serverIP = wifiManager.getDhcpInfo().serverAddress; String stringIP = android.text.format.Formatter.formatIpAddress(serverIP); InetAddress address = InetAddress.getByName(stringIP); SocketAddress socketAddress = new InetSocketAddress(address, PORT); client.connect(socketAddress); 

Tengo el siguiente error en el cliente

 java.net.ConnectException: failed to connect to /192.168.43.1 (port 12345): connect failed: ENETUNREACH (Network is unreachable) at libcore.io.IoBridge.connect(IoBridge.java:114) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192) at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459) at java.net.Socket.connect(Socket.java:842) at java.net.Socket.connect(Socket.java:785) at com.alternatewifimeshmessaging.HostManager.clientConnect(HostManager.java:283) at com.alternatewifimeshmessaging.HostManager.client(HostManager.java:189) at com.alternatewifimeshmessaging.HostManager.run(HostManager.java:59) at java.lang.Thread.run(Thread.java:856) Caused by: libcore.io.ErrnoException: connect failed: ENETUNREACH (Network is unreachable) at libcore.io.Posix.connect(Native Method) at libcore.io.BlockGuardOs.connect(BlockGuardOs.java:85) at libcore.io.IoBridge.connectErrno(IoBridge.java:127) at libcore.io.IoBridge.connect(IoBridge.java:112) ... 8 more 

El servidor no da errores.

Tengo el siguiente permiso establecido en el archivo de manifiesto android:

 <uses-permission android:name="android.permission.INTERNET" > </uses-permission> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" > </uses-permission> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" > </uses-permission> 

Idealmente necesitaría transferir algunos datos del servidor al cliente.

¿Qué estoy haciendo mal?

Al probar resulta que la conexión no se puede establecer en el dispositivo de anclaje.

Pero si invertimos el proceso y abrimos un serversocket en el cliente conectado. Y conectar con él desde el dispositivo de conexión, que funcionará.

Así que invertir la comunicación es la respuesta.

Lado del servidor

 class ServerThread implements Runnable { public void run() { socket = new Socket(); try { serverSocket = new ServerSocket(SERVERPORT); } catch (IOException e) { e.printStackTrace(); } while (!Thread.currentThread().isInterrupted()) { try { socket = serverSocket.accept(); CommunicationThread commThread = new CommunicationThread(socket); new Thread(commThread).start(); } catch (IOException e) { e.printStackTrace(); } } } } 

Lado del cliente

 class ClientThread implements Runnable { @Override public void run() { try { socket = new Socket(); InetSocketAddress socketAddress = new InetSocketAddress(SERVER_IP, SERVERPORT); socket.connect(socketAddress); CommunicationThread commThread = new CommunicationThread(socket); new Thread(commThread).start(); } catch (UnknownHostException e1) { e1.printStackTrace(); } catch (IOException e1) { e1.printStackTrace(); } } } 

En una conexión wifi atada, el proveedor de conexión no puede funcionar como un cliente. Por lo tanto, necesitamos implementar una conexión de socket tcp bidireccional. Utilice un socket de servidor con un número de puerto en el dispositivo que está en modo de conexión. Este dispositivo actúa como un servidor. En el dispositivo cliente, utilice socket para acceder al puerto cliente con dirección IP.

  • Cierre el zócalo al terminar la aplicación
  • Transferencia de archivos de socket android
  • Conector de Bluetooth
  • ¿Cómo leer la respuesta HTTP a través de sockets?
  • ¿Cómo enviar el archivo usando bluetooth en android programatically?
  • Android error de conexión bluetooth (no bt calcetín encontrado, scn 1) - bucle infinito
  • Android: socket bluetooth se niegan a conectarse correctamente
  • Socket EADDRINUSE (Dirección ya en uso)
  • Problema con el archivo de envío de Bluetooth de Android
  • Programación de socket Android sin conexión WIFI
  • Android - Socket conectado aunque no pueda
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.