Как создать HTTP-сервер в Android? [закрыто]


116

Я хотел бы создать простой HTTP-сервер в Android для обслуживания некоторого контента клиенту.

Есть какие-нибудь советы о том, как собрать сервер или использовать любую существующую библиотеку?


Если вам нужен только веб-сервер, вы можете ознакомиться с этим руководством: devlper.com/2010/12/… и его примером: code.google.com/p/krvarma-android-samples/source/browse/… . они оба очень старые, но после некоторых настроек все еще будет работать нормально.
разработчик Android

Ответы:


131

Рассмотрим этот: https://github.com/NanoHttpd/nanohttpd . Очень маленький, написанный на Java. Я использовал его без проблем.


Удивительный. Наверное, сэкономил месяц работы. Можете ли вы использовать его в коммерческом продукте?
Иван Г.

Вы должны прочитать о модифицированной лицензии BSD. Если это позволяет использовать код в коммерческом продукте или нет.
damluar

2
Кажется, я не могу отображать изображения на моей html-странице. Какой каталог следует использовать в HTML для отображения изображений? Спасибо.
Шейн Оливер

путь к изображениям является относительным относительно html-страницы. это не проблема http сервера, это плохой html ..
damluar 03

Могу ли я передать файл, который в настоящее время добавляется в homeDir. Например, я копирую файл с именем f1 в homeDir (используя javacode). Сейчас идет копирование файла, и если кто-то отправит запрос на файл f1, может ли сервер обработать запрос?
Ashwin N Bhanushali

23

NanoHttpd работает как шарм на Android - у нас есть код в производстве, в руках пользователей, который построен на нем.

Лицензия абсолютно разрешает коммерческое использование NanoHttpd без каких-либо «вирусных» последствий.


1
Где я могу найти учебник / образец того, как его использовать? например, чтобы обслуживать файл, расположенный на устройстве, чтобы другие могли его скачать (или транслировать с него)?
разработчик Android

9

Это можно сделать с помощью ServerSocket , как и в JavaSE. Этот класс доступен на Android. android.permission.INTERNETнеобходимо.

Единственная более сложная часть, вам нужно отдельное ожидание потока на ServerSocket, обслуживающее подсокеты, которые поступают из его accept метода. Вам также необходимо остановить и возобновить этот поток по мере необходимости. Самый простой подход - убить ожидающий поток, закрыв ServerSocket. Если вам нужен только сервер, когда ваша активность находится наверху, запуск и остановка потока ServerSocket можно довольно элегантно связать с методами жизненного цикла активности. Кроме того, если на сервере несколько пользователей, может быть полезно обслуживать запросы в разветвленных потоках. Если есть только один пользователь, это может не понадобиться.

Если вам нужно сообщить пользователю, какой IP-адрес прослушивает сервер, используйте NetworkInterface .getNetworkInterfaces (), этот вопрос может дополнительные сведения.

Наконец, здесь, возможно, есть полный минимальный сервер Android, который очень короткий, простой и может быть проще для понимания, чем готовые приложения для конечных пользователей, рекомендованные в других ответах.


6

Другой сервер вы можете попробовать http://tjws.sf.net , на самом деле он уже предоставляет версию с поддержкой Android.


1
Это жирно по меркам Android (100кб). Хорошо, если вам нужен серьезный сервер на java, а не просто обслуживание файлов или удаленный интерфейс конфигурации / отладки / статуса в вашем приложении.
ahcox


Используя наш сайт, вы подтверждаете, что прочитали и поняли нашу Политику в отношении файлов cookie и Политику конфиденциальности.
Licensed under cc by-sa 3.0 with attribution required.