Translate

miércoles, 25 de abril de 2012

Netduino WebServer 1.0

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.

Botón derecho sobre el proyecto y elige "Añadir nuevo elemento".

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.

No hay comentarios:

Publicar un comentario