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

116

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

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

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

Ответы:

131

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

damluar
источник
Удивительный. Наверное, сэкономил месяц работы. Можете ли вы использовать его в коммерческом продукте?
Иван Г.
Вы должны прочитать о модифицированной лицензии 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
3

Если вы используете kotlin, подумайте об этой библиотеке. Он построен для языка котлин. https://github.com/weeChanc/AndroidHttpServer https://github.com/ktorio/ktor

AndroidHttpServer очень маленький, но и функции меньше.

Ktor - очень хорошая библиотека, и использование тоже простое

Стивен Чан
источник