我正在尝试开发一个具有嵌入式 http 服务器的 Android UPnP 应用程序,因此它可以通过局域网提供来自设备的媒体文件。
我使用的 Web 服务器的第一个实现是基于 Apache HttpCore http://hc.apache.org/httpcomponents-core-ga/index.html的 ElementalHttpServer 示例。它必须稍作更改,因为 Android 库中已经包含的 org.apache.http 元素与 httpCore jar 中包含的最新元素不同。
我试图用 jar 中的那些替换 Android 的,但这无法完成 - Android 库中的那些具有优先级。当我更改库顺序时,重复类出现问题。
而不是罐子,我包括源代码并更改数据包名称以避免重复类问题。
管道破损和连接问题仍然存在。
我还尝试过来自 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,但问题仍然存在。有时,请求设备会进入无限循环的请求。
我可能做错了什么?标题可能有问题吗?