¿Cómo crear un servidor nanohttpd en android?
En realidad, había buscado algunas preguntas e ir al github. Pero soy nuevo, no entiendo el ejemplo.
Quiero crear el servidor http en android para que pueda acceder a él en el navegador de la PC.
- El servidor http de Android no es accesible desde otros dispositivos de la red intermitentemente
- ¿Cómo descargar dos o varios archivos a la vez en Android usando NanoHTTPD?
- Almacene, convierta a vídeo una pantalla de Android de la corriente
- Cómo servir un archivo en sdcard usando NanoHTTPD (dentro de Android)
- Uso de NanoHTTPD en Android
Tuve instancia de una clase extender nanohttpd, pero el servidor simplemente no funcionan. No sé por qué, mi equipo y el teléfono están en el mismo WIFI, uh …..
public class MyHTTPD extends NanoHTTPD { /** * Constructs an HTTP server on given port. */ public MyHTTPD()throws IOException { super(8080); } @Override public Response serve( String uri, Method method, Map<String, String> header, Map<String, String> parms, Map<String, String> files ) { System.out.println( method + " '222" + uri + "' " ); String msg = "<html><body><h1>Hello server</h1>\n"; if ( parms.get("username") == null ) msg += "<form action='?' method='get'>\n" + " <p>Your name: <input type='text' name='username'></p>\n" + "</form>\n"; else msg += "<p>Hello, " + parms.get("username") + "!</p>"; msg += "</body></html>\n"; return new NanoHTTPD.Response(msg ); } public static void main( String[] args ) { try { new MyHTTPD(); } catch( IOException ioe ) { System.err.println( "Couldn't start server:\n" + ioe ); System.exit( -1 ); } System.out.println( "Listening on port 8080. Hit Enter to stop.\n" ); try { System.in.read(); } catch( Throwable t ) { System.out.println("read error"); }; } }
- Servidor Android Http y tuberías rotas
- NanoHTTPD. Cache InputStream para archivar y continuar streaming
- Cómo transmitir vídeo desde Internet a través de nanoHTTPd a VideoView
- Cómo crear un servidor http en android que un escritorio puede acceder (viceversa) usando NanoHTTPD
- ¿Por qué no se pudieron encontrar imágenes y archivos de estilo en NanoHTTPD?
- Video streaming usando NanoHttpd, Error: java.net.SocketException: sendto failed: EPIPE (Broken pipe)
Su código de ejemplo le falta un pequeño detalle: crea el servidor, pero nunca llama al método "start ()" que lo activa para escuchar las conexiones entrantes. En su método main (), podría escribir
(new MyHTTPD()).start();
Y todo estaría bien, su servidor respondería de la manera que usted esperaba que lo haría.
La razón por la que funciona de esa manera es doble: Quiero que el constructor para ser una operación barata, barata, sin efectos secundarios. Por ejemplo, mientras que la prueba de unidad, llamo "start ()" en la configuración y "stop ()" en los métodos de desmontaje de mi prueba jUnit.
Este es el código que funciona para mí, pero tengo la versión diferente de NANOHTTPD, no tengo tiempo ahora para probar su solución. Aquí está la clase UploadServer y la clase Nano. Vuelvo file-upload.htm desde sdcard / Discover Control / Web path
public class UploadServer extends NanoHTTPD { public UploadServer() throws IOException { super(8080, new File(".")); } public Response serve( String uri, String method, Properties header, Properties parms, Properties files ) { File rootsd = Environment.getExternalStorageDirectory(); File path = new File(rootsd.getAbsolutePath() + "/Discover Control/Web"); Response r = super.serveFile("/file-upload.htm", header, path, true); return r; } }
Clase NanoHttpd
NanoHTTPD.java
SUBIR ARCHIVO
File-upload.htm
Espero que esto ayude y disfrute de su trabajo.
Las actividades de Android tienen un ciclo de vida y no utilizan una función main()
.
Si desea iniciar y detener el servidor web como parte de la actividad, entonces necesita iniciar y detener la llamada en onPause
y onResume
, es decir
public class MyActivity extends Activity { private MyHTTPD mServer; @Override protected void onResume() { super.onResume(); try { mServer = new MyHTTPD(); mServer.start(); } catch (IOException e) { e.printStackTrace(); mServer = null; } @Override protected void onPause() { super.onPause(); if(mServer != null) { mServer.stop(); mServer = null; } } }
Una alternativa es implementar el servidor web como parte de un Servicio.
En una aplicación que estoy trabajando tengo un requisito para mantener el servidor web en ejecución, incluso si el usuario deja la aplicación. La única manera de hacerlo es iniciar y detener el servidor web como parte de un servicio de larga duración que no está vinculado a la actividad. Vea el gran tutorial de Vogella sobre los servicios de Android .