Android Http сервер и сломанные каналы - PullRequest
7 голосов
/ 01 августа 2011

Я пытаюсь разработать приложение Android UPnP со встроенным http-сервером, чтобы оно могло обслуживать мультимедийные файлы с устройства через локальную сеть.

Первая реализация веб-сервера, которую я использовалбыл основан на примере ElementalHttpServer из Apache HttpCore http://hc.apache.org/httpcomponents-core-ga/index.html. Его пришлось немного изменить, потому что элементы org.apache.http, которые уже включены в библиотеку Android, отличаются от последних, включенных в jar httpCore.

Я пытался заменить Android на те, что были на банке, но это не удалось сделать - те, что в библиотеке Android, имеют приоритет.Когда я изменил порядок библиотек, возникла проблема с дублирующимися классами.

Чем вместо банок я включил исходный код и изменил имена пакетов, чтобы избежать проблемы с дублированными классами.

Проблема спроблемы со сломанным каналом и подключением сохранялись.

Я также пробовал NHttpServer от HttpCoreNIO, поскольку он имеет другой набор классов, чем базовый httpCore, и его можно было включать и использовать без конфликта с httpCore в самом Android.

Затем я использовал 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 голосов
/ 07 января 2012

Не могу много рассказать об ошибках, не увидев ваш код ... но мне раньше был нужен HTTP-сервер, и я использовал приложение NPR в качестве примера для отработки. Код является довольно простым примером того, как использовать java.net.ServerSocket.

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

...