Я пытаюсь разработать приложение Android UPnP, которое имеет встроенный http-сервер, чтобы оно могло обслуживать медиафайлы с устройства по локальной сети.
Первая реализация веб-сервера, которую я использовал, была основана на примере ElementalHttpServer из Apache HttpCore http://hc.apache.org/httpcomponents-core-ga/index.html . Его пришлось немного изменить, потому что элементы org.apache.http, которые уже включены в библиотеку Android, отличались от последних, включенных в банку httpCore.
Я попытался заменить элементы Android на элементы из банки но это невозможно сделать - приоритет имеют те, что в библиотеке Android. Когда я изменяю порядок библиотек, возникла проблема с повторяющимися классами.
Тогда вместо jar-файлов я включил исходный код и изменил имена пакетов, чтобы избежать проблемы с дублированными классами.
Проблема со сломанным каналом и проблемами соединения не исчезла. .
Я также пробовал 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 в приложение, но проблема все еще сохраняется. Иногда запрашивающее устройство заходит в бесконечный цикл запросов.
Что я делал не так? Могут ли заголовки быть проблемой?