24 de Julio de 2014
Jul
11

.NET Tutorial 48. Usar un teléfono móvil para controlar aplicaciones .NET desde cualquier parte del mundo

Categorías: 

Posiblemente al leer el título de este tutorial más de uno/a estará pensando:

-ey primoh, pásame algo de eso que fumas, que parece bueno ;)

En realidad lo que haremos es más simple de lo que parece. Vamos a implementar un pequeño servidor Web en nuestro PC.

Existen multitud de servidores Web, posiblemente los más conocidos sean Apache y el IIS (Internet Information Services)

Sin embargo, lo que nosotros pretenderemos es que nuestra aplicación además de lo que tenga que hacer, incorpore un servidor Web.

Actualmente existen muchas aplicaciones que tienen esta característica.

A bote pronto recuerdo por ejemplo que el gestor de descargas µTorrent tiene un servidor web integrado. De esta forma se pueden controlar las descargas desde otro PC/dispositivo (teléfono móvil por ejemplo) que tenga conexión a internet y un navegador Web cualquiera (IExplorer, Firefox, Chrome, Opera...)

Pues bien, lo que haremos será precisamente eso. Hemos creado una aplicación que permite crear y eliminar una serie de tareas. Lo que hace la aplicación es una mera excusa para ver lo que se puede llegar a hacer con un poco de pericia.

Nuestra aplicación básicamente es esta: 

Al pulsar en el botón Nueva se muestra un input box que nos pide el nombre de la Tarea: 

Las tareas se guardan en un List (Of strings) y se muestran en un Listbox: 

Como véis, la aplicación es totalmente "inútil", pero sirve perfectamente para mostrar el funcionamientdo de un servidor Web hiper-simple

Observaréis que encima de la lista de tareas se muestra esto:

Web server en http://localhost:3333

Cuando ejecutamos la aplicación se crea un "servidor web" que está a la escucha por el puerto 3333

Si abrimos nuestro navegador de internet y escribimos la siguiente dirección en la barra de direcciones:

http://localhost:3333

Ocurre lo siguiente:


(Haz click para agrandar)

WTF?

Lo que se está mostrando es la página principal (index.htm) de nuestro servidor Web "casero".
Como podéis observar se muestran las mismas tareas que tiene el ejecutable
Desde esta página web se pueden crear nuevas tareas o eliminar una tarea existente.

Pulsamos en el link "Nueva Tarea" y se nos muestra la página (nuevo.htm):


(Haz click para agrandar)

Escribimos el nombre de la tarea, por ejemplo Crear nuevo tutorial y pulsamos en el botón Crear.

Automáticamente se vuelve a mostrar la página principal de nuestro servidor Web:


(Haz click para agrandar)

Y observamos que efectivamente, hay una nueva tarea llamada Crear nuevo tutorial

Lo bueno viene ahora, si ahora vamos a nuestra aplicación observamos que allí también está la tarea que creamos desde la página web: 

Vamos a ver que ocurre cuando eliminamos una Tarea desde la página Web.

Seleccionamos la tarea que queremos eliminar, por ejemplo Comprar malacatones y  pulsamos en el botón Eliminar:


(Haz click para agrandar)

Al volver a la pantalla principal observamos que la tarea Comprar malacatones efectívamente ya no está:


(Haz click para agrandar)

Pero tampoco está en nuestra aplicación: 

Vuelvo a recordar que aquí no hay "bases de datos" ni nada parecido.

El servidor Web únicamente actúa como un interfaz para controlar una aplicación de Windows.

Al igual que se crean / borran tareas, puedes hacer lo que se te pase por la imaginación, por ejemplo, yo que sé, imagina que tienes conectado al PC un dispostivo "domótico" controlado por una aplicación de Windows. Podrías encender las luces accediendo a un navegador Web.

Por raro que parezca todo esto se hace en apenas 20 líneas de código gracias a la clase HttpListener que está dentro del Namespace System.Net

Las páginas index.htm y eliminar.htm se modifican "en tiempo de ejecución" para mostrar las tareas que contiene la aplicación.

 

Vale, llegados a este punto, más de uno/a se estará preguntando:

-Si, muy bien,  pero tú dijiste usar un teléfono móvil para controlar aplicaciones, y yo  no veo ningún teléfono móvil por ningún lado :S

Aix...no estamos atentos, eh? :)

Nuestra aplicación está actúando de servidor Web
Lo único que tenemos que hacer son dos cosas:

  • Tener un móvil que se pueda conectar a internet (iPhone, móvil con Android, WP7, etc)
  • Abrir y redirigir el tráfico del  puerto de nuestro servidor Web en nuestro router

Opcionalmente también estaría bien tener algún servicio tipo No-IP o DynDNS que convierten nuestras IP públicas dinámicas en direcciones IP "fijas"

Muchos routers nuevos (y algunos no tan nuevos) ya tienen incorporado estos servicios por lo cual no hace falta descargarse ningún software.

Supongamos que tenemos una cuenta en DynDNS con el siguiente nombre: http://xxxxxblabla.dyndns.info/

Pues bien, dejamos corriendo nuestra aplicación del Tutorial 48, abrimos los puertos en el router, nos cogemos nuestra bicicleta de montaña y nuestro HTC y nos vamos a dar una vuelta por la Sierra de Gredos.

Cuando estamos en el Alto del Mirlo, cogemos nuestro HTC, abrimos el Opera Mini y escribimos: http://xxxxxblabla.dyndns.info/

y voliá:

Damos de alta una nueva tarea a la que llamamos "desde el movil"

Al regresar a casa, observamos que efectivamente, la tarea está en nuestra aplicación: 

 

WTF!!!!!  :)

PD: por cierto, en la barra de direcciones probar de poner una página que no exista, por ejemplo: http://localhost:3333/blablabla.htm

:D :D :D 

 

Tags: httplistener, servidor web .net, simple web server .net, c#, httplistener asíncrono, web server, httplisterner and POST, get POST response httplistener

 

Saludos.
mov eax,ollydbg; Int 13h    

 

Descargar proyecto .NET Tutorial 48
(44 KB. Visual Studio 2008 Professional) 


Nota: El proyecto ha de cargarse en Visual Studio 2008 como "ejecutar como administrador", de lo contrario se producirá una excepción cuando se inicie el httplistener.

Otra opción es dar permisos al servidor local mediante el comando: netsh http add urlacl url=http://+:3333/MyUri user=DOMAIN\user tal y como se indica en la MSDN: http://msdn.microsoft.com/en-us/library/ms733768.aspx

 

0