8

http サーバーが組み込まれている Android UPnP アプリケーションを開発しようとしているので、LAN 経由でデバイスからメディア ファイルを提供できます。

私が使用した Web サーバーの最初の実装は、Apache HttpCore http://hc.apache.org/httpcomponents-core-ga/index.htmlの ElementalHttpServer の例に基づいていました。Android ライブラリに既に含まれている org.apache.http 要素が httpCore jar に含まれている最新のものとは異なるため、少し変更する必要がありました。

Androidのものをjarのものに置き換えようとしましたが、それはできませんでした-Androidライブラリのものが優先されます。ライブラリの順序を変更すると、重複するクラスの問題が発生しました。

jar の代わりに、ソース コードを含め、パケット名を変更してクラスの重複の問題を回避しました。

壊れたパイプと接続の問題の問題は解決しませんでした。

また、基本的な httpCore とは異なるクラスのセットがあり、Android 自体の httpCore と競合することなく含めて使用できるため、HttpCoreNIO の NHttpServer も試しました。

次に、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 を実装しましたが、問題は解決しません。要求元のデバイスが要求の無限ループに陥ることがあります。

私は何が間違っているのでしょうか?ヘッダーが問題になる可能性がありますか?

4

1 に答える 1

0

あなたのコードを見ずにエラーについて多くを語ることはできません..しかし、私は以前にHTTPサーバーが必要であり、うまくいくための例としてNPRアプリを使用しました。コードは、使用方法のかなり簡単な例ですjava.net.ServerSocket

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

于 2012-01-07T12:44:27.883 に答える