当前位置: 首页 > 面试题库 >

Android:套接字-java.net.SocketException:sendto失败:EPIPE(管道断开)

闾丘德宇
2023-03-14
问题内容

我正在尝试使用套接字与服务器建立连接。连接管道损坏,如下所示。

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();
        }
    }

注意:如果我关闭套接字连接,立即可以正常工作。但是我想保持连接仍然活跃,所以我手动关闭套接字连接。停止按钮的onclick我正在关闭连接。

我在网上搜索,但没有找到解决此问题的方法。


问题答案:

在您写入连接时,对等方关闭了连接。这通常意味着您发送了一些它不理解的内容。也许是HTTP服务器?还是您的客户端代码中尚未实现的其他协议?



 类似资料:
  • 我使用的是虚拟机、Ubuntu 16.04、Python 2.7.12。我从这里学到了一个例子。我正在使用演示帐户和TWS。 我可以连接到TWS,因为从日志中我可以看到: 但是我不能做一个订单,我从日志中得到错误: ,是什么意思?如何通过python API修复并使订单?非常感谢。

  • 经过几个小时的努力,我能够设置我的docker容器。我的yml文件如下: 但是,当我在bild.gradle文件中使用'com.google.android.gms:play-services-location:11.0.2'时,我最终收到以下错误: 非常感谢任何帮助。

  • 我得到了一个Android应用程序,但当我启动它时,我得到了一个错误在我的控制台。我正在使用一个数据报套接字创建连接,并且使用了两个类:(这是应用程序的主要活动)和来创建连接。 这里的代码MainActivity: 但它不起作用。

  • 我设置了客户端和服务器套接字。当我使用类ObjectOutputStream和ObjectInputStream以及ReadObject/WriteObject方法时,一切都运行良好。 它模拟了与机器人的通信,我确信机器人只正确解释方法DataOutputStream.WriteBytes。 所以我建立了一个新的体系结构来进行模拟,因为机器人不能每天进行测试。 在下面的代码中,ObjectOutp

  • 问题内容: 我试图理解SocketChannels和NIO。我知道如何使用常规套接字,以及如何制作一个简单的每客户端线程服务器(使用常规阻塞套接字)。 所以我的问题是: 什么是SocketChannel? 当使用SocketChannel而不是Socket时,我还能得到什么呢? 通道和缓冲区之间是什么关系? 什么是选择器? 文档中的第一句话是。那是什么意思? 我也阅读了本文档,但是不知何故…… 问