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.

  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.

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.

FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.