NeonMika.Webserver Exploración – Parte 2

Por Soloelectronicos @soloelectronico

Como  continuación del post  sobre  el servidor NeonMika webserver  vamos a continuar sobre el   uso de este estupendo servidor , esta vez tratando el tema de la gestión  de  formularios en  html    cuyas  paginas  para que  sean  servidas   por el  servidor web NeonMika webserver  se deben almacenar en la micro-sd interna de nuestro Netduino +2

Al programador  le tomó dos semanas  publicar algo nuevo en el servidor porque necesitaba tiempo para aprender cómo funciona realmente un servidor web, necesitando para ello aprender HTML, Javascript (otra vez), los métodos de protocolo de red (POST y GET) y así sucesivamente.

Después de mucha lucha pudo traer un nuevo código, incluso sin la parte de configuración, se centro en la página de inicio de sesión , la cual realmente le dió trabajo que hacer, ya que tuvo que luchar con la página web para alojarla  a bordo de la tarjeta microSD de modo  que  Netduino Plus pudiera  procesar ésta  gracias al servidor  NeonMika  webserver   ejecutándose en Netduino 2 Plus.

Lo que se necesitaba entonces animarlo todo: es ahi   donde  llega la parte del Javascript,   pero ser topo con  el gran problema es que cada página tenía que ser “conectado” al acceder a la página y el inicio de sesión fue el tratamiento incorrecto de abrir otra ventana de inicio de sesión y Además, cada vez que la página se ha podido abrir revelaba la contraseña en el origen de la página. Con todos estos inconvenientes tuvo que abandonar esa idea y pasar a una solicitud de inicio de sesión en el servidor.

?

1 2 3 4 / / / <summary> / / / Página tarjeta MicroSD cómo son la página web de inicio de sesión / / / </ Summary> public const string REQUEST_LOGIN_URL = "login.html" ;

?

1  

Con el código   anterior se hace referencia a la página en la que la forma de inicio de sesión en la página web. Esta página en el  ejemplo se llama “login.html” y se trata de una página web con una forma que se transmita los datos del formulario ( user/pwd)   como parámetros por el método POST. Se ha utilizado el método POST para enviar datos a través del cuerpo del mensaje aunquecomplica un poco el camino para encontrar la contraseña de seguridad.

Para acceder al servidor en el   formulario con el método POST, el código  debe ser escrito de la siguiente manera:

?

1 2 3 4 5 6 7 8 9 10 11 < form method = "post" > < style = "color: rgb (255, 255, 255);" > Usua Ahora: </ lapso > < input type = "text" name = "nombre de usuario" > < style = "color: rgb (255, 255, 255);" > Contraseña: </ lapso > < input type = "password" name = "Contraseña" > < input type = "submit" value = "Login" onclick = "sendlogin1 ()" > </ form >

El tratamiento se realiza de tal manera que cuando se  hace una petición de una página viene a Netduino + se  envía la página de inicio de sesión para que el usuario introduzca la contraseña . Una vez que haya recibido la información y la contraseña que el servidor esté abierto para el cliente para acceder a las páginas.

Una función que controla la solicitud de páginas  puede hacerse de esta manera:

?

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 / / / <summary> / / / Comprueba si una solicitud entrante contra las posibles respuestas / / / </ Summary> / / / <param Name="e"> </ param> privado void HandleRequest (y RequestReceivedEventArgs) {   / / / / Debug ("Empieza a buscar solicitudes");   Respuesta Respuesta = null;   if  (_Loged)   {   Archivo de respuestas / / Normal   if  (_Responses.Contains (e.Request.URL))   {   / / Este respuestas personalizadas crearon la aplicación   respuesta = (Respuesta) _Responses [e.Request.URL];   }   else   {   respuesta = (Respuesta) _Responses [ "FileResponse" ];   }   }   else   {   / / Comprueba si es un mensaje Login mensaje   if (e.Request.Method == "POST" )   {   int validación = 2;   foreach (entrada DictionaryEntry en e.Request.PostArguments)   {   if  ((entry.Key.ToString () == "password" ) & (entry.Value.ToString () == _password))   {   validación -;   }   if  ((entry.Key.ToString () == "nombre de usuario" ) & (entry.Value.ToString () == _USERNAME))   {   validación -;   }   if  (validación == 0) {   / / Inicio de sesión y cargar la cola Webpage usuario solicitado   _Loged = verdadero ;   e.Request.LoadWebpageRequested ();   respuesta = (Respuesta) _Responses [ "FileResponse" ];   }   }   }   else   {   / / Set Login para llamar página web - icono Netduino para la carga y no se cargan otras páginas   if  (e.Request.URL.Length> 5)   {   if  (e.Request.URL.Substring (e.Request.URL.Length - 5) == "html" )   {   e.Request.RequestLogin ();   }   }   else   {   e.Request.RequestLogin ();   }   / / Ir a la página del fileResponse enviar el default   respuesta = (Respuesta) _Responses [ "FileResponse" ];   }   }   if  (response! = null)   {   if  (response.ConditionsCheckAndDataFill (e))   {   Hilo LedThread = new hilo ( new ThreadStart (delegado ()   {   for ( int i = 0; i <3; i + +)   {   _OnboardLed.Write ( verdadero ); Thread.Sleep (5);   _OnboardLed.Write ( false ); Thread.Sleep (20);   }   }));   ledThread.Start ();   }   } }

Enlace para descargar el código fuente . Enlace para descargar los archivos a la tarjeta micro SD(para ejecutar el ejemplo sólo hay que poner en la raíz)

El problema de Imágenes

Un problema con las imágenes incrustadas en la página    html   es que las imágenes pueden ser demasiado pesadas ​​… (> 500kB) lo cual    ya es una cosa pesada para nuestro pequeño servidor web, aunque  puede    que tenga  buenos resultados con  imágenes menores  (por  ejemplo el logo de la Netduino, como se puede ver por el servidor de la pantalla y la imagen de la placa,es sólo de  70kB).

La forma por ahora es tratar de utilizar cifras o pequeña colección de archivos muy pequeños, pero buscando a través del foro Netduino se sugiere  que podría  haber alguna manera de pasar un puntero a la tarjeta microSD para transferir el archivo sin ponerlo en una variable interna,la ventaja seria   que no pasaría la memoria del procesador para archivos y búfer de página HTML  permitiendo  que los archivos de cualquier tamaño pudieran ser transferidos.

El problema de tiempo de espera de páginas

Este es un problema molesto que está pasando y está perjudicando la  sesión enviando POST. A menudo, la placa es demasiado lenta para manejar las peticiones del navegador y   esto hace que la página no se cargue  y haya que actualizar la página  necesitando una segunda petición a la placa y empezar a enviar la página.Este problema no es sólo nuestro, pero todo de una manera en general ha tenido este problema debido a que la capa de código está muy por encima y simplemente toma demasiado tiempo para responder  pero están trabajando para mejorar esto adentro NETMF. 

En la tercera parte se tratara  de XML y JSON métodos y la configuración IP mediante el NeoMika.Webserver servidor. 

Fuente  aqui