Android: Socket – java.net.SocketException: sendto ha fallado: EPIPE (Broken pipe)
Estoy intentando hacer la conexión con el servidor usando el zócalo. El tubo de conexión se rompe como se muestra a continuación las excepciones.
01-31 14:47:16.536: W/System.err(27255): java.net.SocketException: sendto failed: EPIPE (Broken pipe) 01-31 14:47:16.550: W/System.err(27255): at libcore.io.IoBridge.maybeThrowAfterSendto(IoBridge.java:496) 01-31 14:47:16.550: W/System.err(27255): at libcore.io.IoBridge.sendto(IoBridge.java:465) 01-31 14:47:16.550: W/System.err(27255): at java.net.PlainSocketImpl.write(PlainSocketImpl.java:507) 01-31 14:47:16.550: W/System.err(27255): at java.net.PlainSocketImpl.access$100(PlainSocketImpl.java:46) 01-31 14:47:16.664: W/NetworkManagementSocketTagger(24437): setKernelCountSet(10021, 1) failed with errno -2 01-31 14:47:16.684: W/System.err(27255): at java.net.PlainSocketImpl$PlainSocketOutputStream.write(PlainSocketImpl.java:269) 01-31 14:47:16.693: W/System.err(27255): at java.io.DataOutputStream.write(DataOutputStream.java:98) 01-31 14:47:16.693: W/System.err(27255): at java.io.OutputStream.write(OutputStream.java:82) 01-31 14:47:16.693: W/System.err(27255): at com.xxysendRec(y.java:460) 01-31 14:47:16.693: W/System.err(27255): at com.xxyaccess$0(y.java:384) 01-31 14:47:16.693: W/System.err(27255): at com.xxy$2.run(y.java:363) 01-31 14:47:16.693: W/System.err(27255): at java.lang.Thread.run(Thread.java:856) 01-31 14:47:16.693: W/System.err(27255): Caused by: libcore.io.ErrnoException: sendto failed: EPIPE (Broken pipe) 01-31 14:47:16.693: W/System.err(27255): at libcore.io.Posix.sendtoBytes(Native Method) 01-31 14:47:16.693: W/System.err(27255): at libcore.io.Posix.sendto(Posix.java:146) 01-31 14:47:16.693: W/System.err(27255): at libcore.io.BlockGuardOs.sendto(BlockGuardOs.java:177) 01-31 14:47:16.693: W/System.err(27255): at libcore.io.IoBridge.sendto(IoBridge.java:463)
Aquí está el código y en esta línea outStreamRec.write(bData);
Lanzando una excepción.
- ¿Cómo crear socket Raw en Android?
- ¿Qué eventos pueden despertar un dispositivo Android durmiente?
- FIXED: No se puede conectar a adb a través de wifi
- Conectar la aplicación android a un servidor sockjs
- Múltiples hilos de lectura desde el mismo socket
try { port = 86; byterecv = new byte[1040]; clientRec = new Socket(); clientRec.connect(new InetSocketAddress("192.168.1.36", port)); System.out.println("Just connected to " + clientRec.getRemoteSocketAddress()); } catch (IOException e2) { // TODO Auto-generated catch block e2.printStackTrace(); } while (true) { try { System.out.println("Connecting to " + ServerUrl.url + " on port " + port); OutputStream outToServerRec = clientRec.getOutputStream(); DataOutputStream outStreamRec = new DataOutputStream(outToServerRec); outStreamRec.write(bData); InputStream inFromServerPlay = clientRec.getInputStream(); DataInputStream inStreamPlay = new DataInputStream(inFromServerPlay); while ((lstream = inStreamPlay.read(byterecv)) != -1) { System.out.println("startrec bytearray -- " + byterecv.length); bos1.write(byterecv, 0, lstream); } if (stopcall == true) { clientRec.close(); break; } } catch (IOException e) { e.printStackTrace(); } }
Nota: Si cierro la conexión del zócalo inmediatamente funciona bien. Pero quiero mantener la conexión con vida todavía cerrar la conexión de socket manualmente. Onclick del botón de parada Estoy cerrando la conexión.
Hice una búsqueda de Google, pero no encontré una manera de solucionar esto. Cualquier sugerencia o idea de cómo resolver esto?
La ayuda será apreciada.
- Uso de Socket.IO en Android siempre devuelve error de sondeo XHR
- Android Wifip2p: ¿Por qué la información de grupo es nula después de conectarse con el propietario del grupo
- Problema al conectar la aplicación de Android al socket mediante la conexión de celda
- Android trata con dispositivos IoT sin conexión a Internet
- ¿Cómo administrar una conexión Bluetooth en Android a través de cambios de configuración?
- Aplicación de Android que trabaja en WIFI y 3G (Sin proxy), pero no funciona en 3G (Si proxy y puerto están asignados)
- Comunicación de socket con Python en Android
- ¿Cómo obtener datos desde / hacia un socket en un hilo?
El interlocutor cerró la conexión mientras escribía. Eso generalmente significa que le enviaste algo que no entendía. ¿Es tal vez un servidor HTTP? ¿O algún otro protocolo que no haya implementado en su código de cliente?
Mis 2 centavos, en caso de que ayuda a nadie: Teníamos el mismo problema (BROKEN EPIPE), y mirando a través de violinista (o Charls, o WireShark, u otro depurador proxy / listener / etc) hemos notado que no se envía ninguna solicitud En absoluto.
La razón fue que agregamos "Content-Length" cabecera con el valor equivocado.
HTH!
Me encontré con este tipo de problema en un dispositivo Samsung Tablet (GT-P5113, Android 4.2.2), la aplicación funciona bien en otros dispositivos (Nexus 4/5/7).
El código en el Libcore / io / IoBridge.java se parece a:
public static int sendto(FileDescriptor fd, byte[] bytes, int byteOffset, int byteCount, int flags, InetAddress inetAddress, int port) throws IOException { boolean isDatagram = (inetAddress != null); if (!isDatagram && byteCount <= 0) { return 0; } int result; try { result = Libcore.os.sendto(fd, bytes, byteOffset, byteCount, flags, inetAddress, port); } catch (ErrnoException errnoException) { result = maybeThrowAfterSendto(isDatagram, errnoException); } return result; }
Mientras que Libcore.os.sendto () es una llamada nativa.
Tal vez probar una vez más es un buen candidato para la solución.
Sucedió a mí también, y la razón tonta era que Internet en el dispositivo no funcionaba correctamente.
Compruebe su conexión a Internet, esta podría ser la razón.