java.net.SocketException:sendto失败:通过到localhost的数据连接的EPIPE(管道



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

问题是它无法通过数据连接工作。NPR也有同样的问题。

总之,该代理作为本地web服务器运行,在应用程序和远程流之间建立接口。它在本地主机127.0.0.1上运行,带有一个生成的自定义端口。当服务器读取流数据时,它会将其复制到应用程序中,正如您在StreamProxy:中第223行所读到的那样

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

然而,这条线在数据连接上产生了这个异常:

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

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

以下是一些解决方案!

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

更新Java

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

禁用不需要的网络主机

CCD_ 9和CCD_。它们可能会减慢或干扰您的连接。访问网络控制面板并单击"modify network cards"(或类似内容)。右键单击需要禁用的主机,然后简单地单击禁用。

禁用防火墙

您可以访问控制面板中的防火墙设置并在那里禁用它。如果这不起作用,你也可以尝试禁用路由器的防火墙。如果失败,请尝试禁用防病毒功能(不建议使用这些选项,因为黑客很容易渗透到您的计算机中)。

这也适用于:

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

最新更新