【问题标题】:what caused IOException and Broken pipe是什么导致了 IOException 和 Broken pipe
【发布时间】:2012-06-16 17:16:11
【问题描述】:

我的 AVD 是 API 15,我不知道为什么,但是每当我在模拟器上运行应用程序时,都会出现以下消息。除了控制台中的错误消息之外,它似乎没有造成任何麻烦。

[2012-06-17 00:03:26 - ddmlib] Broken pipe
java.io.IOException: Broken pipe
    at sun.nio.ch.FileDispatcher.write0(Native Method)
    at sun.nio.ch.SocketDispatcher.write(SocketDispatcher.java:47)
    at sun.nio.ch.IOUtil.writeFromNativeBuffer(IOUtil.java:122)
    at sun.nio.ch.IOUtil.write(IOUtil.java:93)
    at sun.nio.ch.SocketChannelImpl.write(SocketChannelImpl.java:352)
    at com.android.ddmlib.JdwpPacket.writeAndConsume(JdwpPacket.java:213)
    at com.android.ddmlib.Client.sendAndConsume(Client.java:575)
    at com.android.ddmlib.HandleHeap.sendREAQ(HandleHeap.java:348)
    at com.android.ddmlib.Client.requestAllocationStatus(Client.java:421)
    at com.android.ddmlib.DeviceMonitor.createClient(DeviceMonitor.java:837)
    at com.android.ddmlib.DeviceMonitor.openClient(DeviceMonitor.java:805)
    at com.android.ddmlib.DeviceMonitor.processIncomingJdwpData(DeviceMonitor.java:765)
    at com.android.ddmlib.DeviceMonitor.deviceClientMonitorLoop(DeviceMonitor.java:652)
    at com.android.ddmlib.DeviceMonitor.access$100(DeviceMonitor.java:44)
    at com.android.ddmlib.DeviceMonitor$3.run(DeviceMonitor.java:580)

可能是什么原因?

【问题讨论】:

    标签: android avd


    【解决方案1】:

    如果有人同时使用eclipse和android studio,那么eclipse会抛出这个错误。所以即使你通过 DDMS 选择设备,它也会抛出这个错误。

    【讨论】:

      【解决方案2】:

      老问题,但仍然相关,我没有看到有关此信息的任何其他答案:

      对我来说,它发生在另一个 Eclipse 同时运行时,DDMS 在同一个套接字上竞争,因为 Eclipse 试图连接到 Android 设备。

      解决方案是关闭另一个 Eclipse。希望它可以帮助某人。

      更新:可能更好的解决方案是将另一个 Eclipse 的 DDMS 端口编辑为您不使用的东西。所以它退出了比赛。

      【讨论】:

      • 这是唯一对我有用的解决方案。我在来宾帐户和我的用户帐户上运行 Eclipse 时遇到了这个问题。在我的访客帐户上关闭 Eclipse 后,问题就解决了。
      • 在我的例子中,它是与 Eclipse 并行运行的 Android Studio。
      【解决方案3】:

      当我同时打开 monitor 和 Eclipse ADT 时,这发生在我身上。尝试关闭所有与 Android 相关的东西,然后执行adb kill-server && sleep 5 && adb devices,然后再次启动您的工具(Eclipse/Ant/AS)。

      【讨论】:

      • 另外,关闭您已启动应用的所有其他 Android Studio 实例。
      • 我发现只使用adb kill-server 就可以解决我的问题。
      【解决方案4】:

      'Broken pipe' 表示您已将数据写入已被对等方关闭的连接。解决方案:不要。这本质上是一个应用程序协议错误。

      【讨论】:

        【解决方案5】:

        我猜客户端(Eclipse)通过管道协议与服务器(你的模拟器)通信(这个协议是众所周知的在同一台机器上通信 2 个进程)。

        沟通渠道有时会中断。 (可能有 100 多个原因)

        要解决此问题:重新启动模拟器 (AVD)。也许您将不得不等待片刻(~1 分钟??),以便 Eclipse 可以恢复管道通道并且您的 Log Cat 将返回。否则,请重新启动 Eclipse 和模拟器以消除此错误。

        【讨论】:

        • 我重启了模拟器,但还是有这个问题。通过转到 AVD 管理器,删除 AVD 并创建一个新的,我能够获得一个好的管道。不知道为什么,但它解决了问题。
        • 如果 AVD 损坏,您可以尝试打开 AVD Manager > Start.. > 勾选“Wipe user data”以重置您的 AVD
        • 猜错了。异常清楚地表明他使用的是套接字,而不是管道。
        【解决方案6】:

        “管道损坏”的最常见原因是(通过套接字通信的一对机器)在通信完成之前关闭了它的套接字末端。其中大约一半是因为在该套接字上通信的程序已终止。

        如果发送字节的程序将它们发送出去并立即关闭套接字或自行终止,则套接字可能在字节传输和读取之前停止运行。

        尝试在关闭套接字的任何地方以及在允许程序终止之前暂停以查看是否有帮助。

        仅供参考:“管道”和“套接字”是有时可以互换使用的术语。

        【讨论】:

        • 如果程序发送数据然后关闭套接字,套接字会一直发送数据,直到全部被确认或发生故障。在网络程序中添加暂停只会表现出对潜在问题的误解。它不能解决任何问题。
        【解决方案7】:

        我注意到最近这种情况经常发生(每 5 分钟左右)。 如果我同时运行物理设备和模拟器,频率似乎会增加。

        停止模拟器并仅使用物理设备进行调试阻止了它经常发生 - 现在我每天只看到一两次。

        要在它发生时解决它,您无需关闭模拟器或重新启动设备 - 关闭并重新打开 USB 调试模式应该会使其再次显示在 adb 下。

        【讨论】:

          【解决方案8】:

          我已经为这个问题苦苦挣扎了很长时间。每当我想使用 Chrome 的调试工具调试 android 移动应用程序时,我每 5 分钟就会断开连接。

          我发现这确实是其他使用手机连接的进程在操作系统后面运行,破坏了手机和操作系统之间的通信。

          我使用的是 Macbook Pro,我正在运行 IntelliJ IDEA 调试器 + Android 文件传输(不知道这在后面运行)和 Chrome 的调试器工具。当我使用“活动监视器”工具关闭 Android 文件传输过程时,一切正常,手机和操作系统之间不再断开连接。我的建议是始终检查您是否正在运行其他 Android 进程。

          【讨论】:

            【解决方案9】:

            当另一端的客户端关闭套接字连接时,会发生“Broken pipe”异常。大多数情况下,这没什么好担心的。

            【讨论】:

            • 那么为什么客户端可以关闭其他尺寸?
            • 另一端程序关闭或用户停止请求。例如,单击 html 页面中的链接,浏览器将关闭所有其他待处理的请求,然后服务器将遇到这些“Broken pipe”异常。
            • 所以我怀疑为什么我只是在模拟器上运行应用程序时会发生这种情况?
            • 查看堆栈跟踪,我的猜测是模拟器断开了与 IDE 的连接(?)。可能是因为它还没有准备好,或者是上传了新版本?
            • 为什么当您尝试写入对等方已经关闭的套接字时无需担心?应用程序协议错误是否值得关注?
            【解决方案10】:

            我同时使用 Android Studio 和 DDMS。关闭 DDMS 为我解决了这个问题。

            重启 Android Studio 没有任何影响。

            【讨论】:

              【解决方案11】:

              万一其他人没有找到任何解决方案。在 Eclipse Neon 中,当我在插件目录中有两个 DDMS jar 时,就会发生这种情况。我有 andmore.ddms.jar 和 com.android_ddms.jar。删除一个解决了错误,我猜他们都竞争连接到同一个端口。

              【讨论】:

                【解决方案12】:

                重启安卓设备解决了我的问题

                【讨论】:

                  【解决方案13】:

                  就我而言,我删除了主目录中的 .android。 没关系。

                  【讨论】:

                    猜你喜欢
                    • 2010-11-13
                    • 2016-10-03
                    • 1970-01-01
                    • 2016-05-08
                    • 1970-01-01
                    • 2011-06-06
                    • 2012-10-05
                    • 2011-02-16
                    相关资源
                    最近更新 更多