En este
tutorial vamos a mostrar cómo crear un pequeños servidor web, que ejecutaremos
en nuestro Netduino (+). El servidor web debe responder ante cada petición HTTP
con un "Hola Mundo". (Más simple imposible).
Empezamos
creando un nuevo proyecto de tipo Netduino Plus en nuestro Visual Studio.
Añade una
nueva clase llamada WebServer.cs.
Aquí
presentamos una versión muy simple de nuestro servidor web, que iremos evolucionando en los siguientes
artículos. El servidor se
mantiene a la escucha, atendiendo las peticiones, y respondiendo "Hola
Mundo" mientras hace parpadear el led de nuestro Netduino Plus.
public class WebServer : IDisposable
{
private Socket socket = null;
private OutputPort led = new OutputPort(Pins.ONBOARD_LED, false);
public WebServer()
{
//Inicializamos el socket
socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream,
ProtocolType.Tcp);
//Conectamos el socket
socket.Bind(new IPEndPoint(IPAddress.Any, 80));
//Iniciamos
la escucha
socket.Listen(10);
ListenForRequest();
}
public void ListenForRequest()
{
while (true)
{
using (Socket clientSocket = socket.Accept())
{
//Aceptamos el cliente
IPEndPoint clientIP = clientSocket.RemoteEndPoint as IPEndPoint;
EndPoint clientEndPoint = clientSocket.RemoteEndPoint;
int bytesReceived = clientSocket.Available;
if (bytesReceived > 0)
{
//Obtenemos la petición
byte[] buffer = new byte[bytesReceived];
int byteCount = clientSocket.Receive(buffer, bytesReceived,
SocketFlags.None);
string request = new string(Encoding.UTF8.GetChars(buffer));
Debug.Print(request);
//Componemos la respuesta (Nota 1)
string response = "Hola Mundo";
string header = "HTTP/1.0 200 OK\r\nContent-Type: text;
charset=utf-8\r\nContent-Length: " + response.Length.ToString() +
"\r\nConnection: close\r\n\r\n";
clientSocket.Send(Encoding.UTF8.GetBytes(header), header.Length,
SocketFlags.None);
clientSocket.Send(Encoding.UTF8.GetBytes(response), response.Length,
SocketFlags.None);
//Parpadeo del led
led.Write(true);
Thread.Sleep(150);
led.Write(false);
}
}
}
}
#region IDisposable Members
~WebServer()
{
Dispose();
}
public void Dispose()
{
if (socket != null)
socket.Close();
}
#endregion
}
Nota 1: En
las siguientes versiones de nuestro servidor web (multi-hilo) veremos la
importancia de crear una respuesta a la solicitud realizada.
El siguiente
paso es añadir el siguiente código para iniciar el servidor web.
public static void Main()
{
Microsoft.SPOT.Net.NetworkInformation.NetworkInterface.GetAllNetworkInterfaces()[0].EnableDhcp();
WebServer webServer = new WebServer();
webServer.ListenForRequest();
}
En el
siguiente paso, tenemos que desplegar el código en nuestro Netduino
haciendo click en las propiedades del proyecto.
Una vez
cambiadas las propiedades del proyecto, seleccionamos la pestaña ".Net
Micro Framework" y cambiamos las siguientes propiedades:
Transport:
USB
Device:
NetduinoPlus_NetduinoPlus
Ahora solo
nos queda pulsar F5 para pasar nuestro código a Netduino
¿COMO
REALIZAR LAS PRUEBAS?
Lo primero
que debemos hacer tras desplegar el código en nuestro Netduino, es conectarlo a
un router (en mi caso voy a utilizar un router viejo que tenía por casa), que
deberá estar configurado para reservar una ip a nuestro netduino, esto nos hará
más fácil saber cuál es la dirección ip en la que se encuentra el servidor web.
En mi caso he reservado la ip 192.168.1.2 para que siempre sea servida a la
misma dirección MAC.
Por otro
lado conectamos vía wifi, nuestro pc al router y realizamos la siguiente
petición mediante nuestro navegador.