¿Cómo crear un servidor HTTP en Android? [cerrado]

116

Me gustaría crear un servidor HTTP simple en Android para entregar contenido a un cliente.

¿Algún consejo sobre cómo construir el servidor o usar alguna biblioteca existente?

biquillo
fuente
si todo lo que desea es un servidor web, puede consultar este tutorial: devlper.com/2010/12/… y su ejemplo: code.google.com/p/krvarma-android-samples/source/browse/… . ambos son muy antiguos, pero después de algunos ajustes seguirá funcionando bien.
desarrollador de Android

Respuestas:

131

Considere este: https://github.com/NanoHttpd/nanohttpd . Muy pequeño, escrito en Java. Lo usé sin ningún problema.

Damluar
fuente
Asombroso. Probablemente ahorró un mes de trabajo. ¿Puedes usarlo en un producto comercial?
Ivan G.
Debería leer sobre la licencia BSD modificada. Si permite usar código en producto comercial o no.
Damluar
2
Parece que no puedo hacer que las imágenes se muestren en mi página html. ¿Qué directorio debe usarse en el html para que se muestren las imágenes? Gracias.
Shane Oliver
La ruta a las imágenes es relativa con respecto a la página html. que no es un problema del servidor http, es malo html ..
damluar
¿Puedo servir un archivo que se está agregando actualmente a homeDir. Por ejemplo, estoy copiando un archivo llamado f1 en homeDir (usando javacode). Ahora la copia del archivo está en progreso y si alguien envía una solicitud para el archivo f1 ¿Puede el servidor procesar la solicitud?
Ashwin N Bhanushali
23

NanoHttpd funciona a la perfección en Android: tenemos código en producción, en manos de los usuarios, que se basa en él.

La licencia permite absolutamente el uso comercial de NanoHttpd, sin implicaciones "virales".

Paul Hawke
fuente
1
¿Dónde puedo encontrar un tutorial / muestra de cómo usarlo? por ejemplo, para servir un archivo ubicado en el dispositivo, para que otros puedan descargarlo (o transmitir desde él)?
desarrollador de Android
9

Esto se puede hacer usando ServerSocket , al igual que en JavaSE. Esta clase está disponible en Android. android.permission.INTERNETes requerido.

La única parte más complicada es que necesita un hilo de espera separado en ServerSocket, que atienda los sub-sockets que provienen de su acceptmétodo. También debe detener y reanudar este hilo según sea necesario. El enfoque más simple parece matar el hilo de espera cerrando ServerSocket. Si solo necesita un servidor mientras su actividad está en la parte superior, iniciar y detener el hilo de ServerSocket se puede vincular de manera bastante elegante a los métodos del ciclo de vida de la actividad. Además, si el servidor tiene varios usuarios, puede ser bueno atender las solicitudes en los subprocesos bifurcados. Si solo hay un usuario, esto puede no ser necesario.

Si necesita decirle al usuario en qué IP está escuchando el servidor, use NetworkInterface .getNetworkInterfaces (), esta pregunta puede decirle trucos adicionales.

Finalmente, aquí existe posiblemente el servidor Android mínimo completo que es muy corto, simple y puede ser más fácil de entender que las aplicaciones de usuario final terminadas, recomendadas en otras respuestas.

Audrius Meskauskas
fuente
6

Otro servidor puede probar http://tjws.sf.net , en realidad ya proporciona una versión habilitada para Android.

Dmitriy R
fuente
1
Esto es gordo para los estándares de Android (100 kb). Bueno si desea un servidor serio en Java en lugar de un simple servicio de archivos o una interfaz remota de configuración / depuración / estado en su aplicación.
ahcox