java.net.SocketException: sendto failed: EPIPE (Broken pipe) over a data connection to localhost

Posted

技术标签:

【中文标题】java.net.SocketException: sendto failed: EPIPE (Broken pipe) over a data connection to localhost【英文标题】: 【发布时间】:2013-02-07 01:04:53 【问题描述】:

在我的 android 应用程序中,我想读取音频流并解析其广播元数据。 我在 NPR 项目中使用 StreamProxy 让它工作: http://code.google.com/p/npr-android-app/source/browse/Npr/src/org/npr/android/news/StreamProxy.java?r=e4984187f45c39a54ea6c88f71197762dbe10e72

问题是它不能通过数据连接工作。 NPR 也遇到了同样的问题。

总而言之,这个代理作为本地网络服务器运行,在应用程序和远程流之间建立一个接口。它使用生成的自定义端口在 localhost 127.0.0.1 上运行。 当服务器读取流数据时,它会将其复制到应用程序,您可以在 StreamProxy 的第 223 行读取:

client.getOutputStream().write(buff, 0, readBytes);

但是,该行通过数据连接产生此异常:

java.net.SocketException: sendto failed: EPIPE (Broken pipe)

我不是套接字和流媒体方面的专家。在这种情况下,我不明白 wifi 和数据连接之间有什么区别。

【问题讨论】:

嗨,即使我正在使用代理频道播放流媒体。它在某些设备上抛出此错误。你有没有找到任何解决方案。 @romain-piel 你有没有弄清楚这里的问题是什么?我遇到了同样的问题,但找不到解决方案。 不:-/这是一个非常奇怪的。我现在正在使用与流并行的连接。不理想,但至少它适用于各种情况 @romain-piel 你能分享你的解决方案吗?我的用例和你的一模一样,我几天来一直在寻找解决方案。 @adi 和 Romain:有人对此有解决方案吗?我有一个非常相似的用例,但我找不到解决方法。 【参考方案1】:

以下是一些解决方案!

首先确保您的客户端与您尝试加入的服务器具有相同的版本。如果您没有相同的版本,您可以下载MCNostalgia 并使用它来降级您的客户端。

更新 Java

如果您不想遇到任何不兼容问题,那么我建议您安装最新的 Java 运行时环境 (jre 7.0_05)。在您这样做之前,建议您卸载其他以前的版本。如果您的操作系统在 32bit 中运行,则仅安装 32bit (x86) 版本。如果您有64bit,请以64bit 开头,然后按此精确顺序安装32bit

禁用不需要的网络主机

HamachiVirtual Box 可能是其中之一。它们可能会减慢或干扰您的连接。访问网络控制面板并单击“modify network cards”(或类似内容)。右键单击需要禁用的主机,然后单击禁用。

禁用防火墙

您可以在控制面板中访问防火墙设置并将其禁用。如果这不起作用,您也可以尝试禁用路由器的防火墙。如果这些都失败了,请尝试禁用您的防病毒软件(不建议使用这些选项,因为黑客很容易侵入您的计算机)。

这也适用于:

> Internal exception: java.net.SocketException: Software  caused
> connection abort: socket write error

【讨论】:

以上是关于java.net.SocketException: sendto failed: EPIPE (Broken pipe) over a data connection to localhost的主要内容,如果未能解决你的问题,请参考以下文章

是啥导致我的 java.net.SocketException:连接重置? [复制]

如何修复 java.net.SocketException:损坏的管道?

Java 1.6 HttpsURLConnection:java.net.SocketException:连接重置

java.net.SocketException:recvfrom 失败:ETIMEDOUT(连接超时)

java.net.SocketException:软件导致连接中止:recv 失败 [重复]

如何解决 java.net.SocketException:使用 selenium 的 java 中的连接重置异常?