Android Http服务器和破碎的管道

时间:2011-08-01 12:05:48

标签: android sockets upnp nanohttpd

我正在尝试开发一个内置了http服务器的Android UPnP应用程序,因此它可以通过局域网从设备提供媒体文件。

我使用的第一个web服务器实现基于Apache HttpCore http://hc.apache.org/httpcomponents-core-ga/index.html的ElementalHttpServer示例。 它必须稍微更改一下,因为Android库中已包含的org.apache.http元素与httpCore jar中包含的最新元素不同。

我尝试用jar中的那些代替来自jar的那些但是无法完成 - Android库中的那些具有优先权。当我更改库顺序时,存在重复类的问题。

而不是jar,我包含了源代码并更改了数据包名称以避免重复的类问题。

管道损坏和连接问题仍然存在问题。

我也尝试过来自HttpCoreNIO的NHttpServer,因为它具有与基本httpCore不同的类集,可以包含和使用,而不会与Android本身的httpCore冲突。

然后我使用了NanoHTTPD,它看起来效果最好的所有http服务器都很胖,但仍然遇到与其他所有服务器相​​同的问题:

java.net.SocketException: The connection was reset
at org.apache.harmony.luni.platform.OSNetworkSystem.sendStreamImpl(Native Method)
at org.apache.harmony.luni.platform.OSNetworkSystem.sendStream(OSNetworkSystem.java:498)
at org.apache.harmony.luni.net.PlainSocketImpl.write(PlainSocketImpl.java:585)
at org.apache.harmony.luni.net.SocketOutputStream.write(SocketOutputStream.java:59)
at com.zappotv.network.http.NanoHTTPD$HTTPSession.sendResponse(NanoHTTPD.java:828)
at com.zappotv.network.http.NanoHTTPD$HTTPSession.run(NanoHTTPD.java:478)
at java.lang.Thread.run(Thread.java:1096)

java.net.SocketException: Broken pipe
at org.apache.harmony.luni.platform.OSNetworkSystem.sendStreamImpl(Native Method)
at org.apache.harmony.luni.platform.OSNetworkSystem.sendStream(OSNetworkSystem.java:498)
at org.apache.harmony.luni.net.PlainSocketImpl.write(PlainSocketImpl.java:585)
at org.apache.harmony.luni.net.SocketOutputStream.write(SocketOutputStream.java:59)
at com.zappotv.network.http.NanoHTTPD$HTTPSession.sendResponse(NanoHTTPD.java:828)
at com.zappotv.network.http.NanoHTTPD$HTTPSession.run(NanoHTTPD.java:478)
at java.lang.Thread.run(Thread.java:1096)

最近我在应用程序中实现了iJetty,但问题仍然存在。 有时请求设备会进入无限循环的请求。

我可能做错了什么?标题可能有问题吗?

1 个答案:

答案 0 :(得分:0)

在没有看到你的代码的情况下,不能说错误。但我之前需要一个HTTP服务器,并以NPR应用程序为例来解决问题。该代码是如何使用java.net.ServerSocket的相当直接的示例。

http://code.google.com/p/npr-android-app/source/browse/Npr/src/org/npr/android/news/StreamProxy.java

相关问题