Android: Socket - java.net.SocketException: sendto a échoué: EPIPE (Broken pipe)
Je suis en train de faire la connexion avec le serveur à l'aide d'une douille. Le tuyau de raccordement est brisé comme indiqué ci-dessous exceptions.
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.x.x.y.sendRec(y.java:460)
01-31 14:47:16.693: W/System.err(27255): at com.x.x.y.access$0(y.java:384)
01-31 14:47:16.693: W/System.err(27255): at com.x.x.y$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)
voici le code et sur cette ligne outStreamRec.write(bData);
lancer une exception.
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();
}
}
Remarque :Si je ferme la socket de connexion immédiate fonctionne très bien. Mais je veux garder la connexion encore je ferme la socket de connexion manuellement. Onclick du bouton d'arrêt je suis la fermeture de la connexion.
J'ai fait une recherche Google, mais je n'ai pas trouver un moyen de résoudre ce problème. Toute suggestion ou une idée de comment résoudre ce problème ??
Aide sera appréciée.
source d'informationauteur Rahul Baradia
Vous devez vous connecter pour publier un commentaire.
Par les pairs a fermé la connexion alors que vous avez été écrit pour elle. Cela signifie généralement que vous l'avez envoyé quelque chose qu'il ne comprenait pas. C'est peut-être un serveur HTTP? Ou une autre protocole que vous n'avez pas mis en œuvre dans votre code client?
Mes 2 cents, dans les cas où il permet à toute personne:
Nous avons eu le même problème (CASSÉ EPIPE), et à la recherche par le biais de fiddler (ou Charls, ou WireShark, ou autre mandataire débogueur /auditeur /etc), nous avons remarqué qu'aucune demande est envoyé à tous.
La raison en est que nous avons ajouté "Content-length" (Longueur d'en-tête avec la bonne valeur.
HTH!
J'ai rencontré ce genre de problème sur une Tablette Samsung(GT-P5113, Android 4.2.2) de l'appareil, l'application fonctionne bien sur d'autres appareils(Nexus 4/5/7).
Le code de la Libcore/io/IoBridge.java ressemble :
tandis que le Libcore.os.sendto() est un appel des indigènes.
Peut-être essayer une fois de plus est un bon candidat pour cette solution.
Est arrivé à moi aussi, et la stupide raison était que l'Internet sur l'appareil ne fonctionnait pas correctement.
Vérifier votre connexion internet, cela pourrait être la raison.