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"
>
<
p
style
=
"color: rgb (255, 255, 255);"
> Usua Ahora: </
lapso
> <
input
type
=
"text"
name
=
"nombre de usuario"
>
<
p
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