我正在尝试使用套接字与服务器建立连接。连接管道断开,如下所示。
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)
以下是代码,并在此行outStreamRec.write(bData);
抛出异常。
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();
}
}
注意:如果我关闭套接字连接立即正常工作。但我想保持连接仍然活着,我手动关闭套接字连接。单击停止按钮我正在关闭连接。
我在网上搜索过,但没有办法解决这个问题。
答案 0 :(得分:11)
同伴在你写信时关闭了连接。这通常意味着你发送了一些它不理解的东西。它可能是HTTP服务器吗?或者您在客户端代码中未实现的其他协议?
答案 1 :(得分:3)
我的两分钱:我们有同样的问题(BROKEN EPIPE),通过Fiddler(或Charls,或WireShark,或其他代理调试器/监听器/等),我们注意到没有请求被发送到所有。
原因是我们添加了" Content-Length"标头错误的值。
答案 2 :(得分:0)
我在三星平板电脑(GT-P5113,Android 4.2.2)设备上遇到了这种问题,该应用程序在其他设备(Nexus 4/5/7)上运行良好。
Libcore / io / IoBridge.java中的代码如下所示:
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;
}
而Libcore.os.sendto()是本机调用。
也许再试一次是解决方法的好候选人。
答案 3 :(得分:0)
也发生在我身上,而愚蠢的原因是设备上的互联网无法正常工作。
检查您的互联网连接,这可能是原因。