jueves, 25 de octubre de 2012

[C#] Monitoreando una IP con un Timer

 

Introducción:

Una tarea bastante solicitada en el desarrollo de una aplicación, es necesitar que un bloque de código se ejecute durante X cantidad de veces; ya sea para monitorear el estado de un servicio web, estar revisando un valor en base de datos, estar esperando a que se copie un archivo en una ubicación X, entre otras cosas …

En este caso vamos a realizar una aplicación de consola que encargue de monitorear cada segundo si una IP se encuentra accesible en terminos de red.

El framework de .net nos ofrece un excelente objeto llamado timer para realizar esta tarea (digo excelente por que es de los objetos que mas me gusta utilizar).

Está es la documentación oficial:

Timer (Clase)

Creando el objeto timer

Sólo necesitamos modificar dos cosas del timer para ponerlo a funcionar:

  • Modificar el atrubuto Interval que cómo mencionan los libros en linea:

“Obtiene o establece el intervalo en el que se provoca el evento Elapsed.”

  • Agregar el evento Elapsed que respectivamente:

“Se produce cuando transcurre el intervalo.”

El ejemplo nos quedaría entonces de esta forma:

      static void Main(string[] args)
{
System.Timers.Timer objTimer = new System.Timers.Timer();
objTimer.Interval = 1000;
objTimer.Elapsed += new System.Timers.ElapsedEventHandler(objTimer_Elapsed);
objTimer.Start();
Console.ReadLine();
}

El evento se ejecutaría cada un segundo (mil milisegundos) y nos quedaría así :


      static void objTimer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
var Ip = "10.35.40.70";

if (RealizarPing(Ip))
{
Console.WriteLine(string.Format("La Ip: {0} se encuentra accesible",Ip));
}
else
{
Console.WriteLine(string.Format("La Ip: {0} NO encuentra accesible", Ip));
}
}

static bool RealizarPing(string Ip)
{
Ping p = new Ping();
try
{
PingReply reply = p.Send(Ip, 3000);
if (reply.Status == IPStatus.Success)
return true;
}
catch { }
return false;
}

Para poder instanciar el objeto Ping, deben de referenciar el siguiente espacio de nombres:


using System.Net.NetworkInformation;

En mi caso la Ip 10.35.40.70 es de otro computador que tengo en mi casa conectado a la misma red; deben de cambiarla por cualquier otra que sea accesible en terminos de red para realizar la prueba.


Al ejecutar la aplicación tendremos algo como esto:


Untitled


Observen que hubo un momento en que la Ip NO se encontraba accesible; esto lo logre desconectando el cable de red por un momento para que la prueba fuera mas completa.


Código


El código realizado con visual studio 2010, lo pueden descargar desde está dirección:


Descargar código



1 comentario:

  1. Use tu programa como base para hacer uno que acepte varias Ip's, pero al implementar la lectura de datos desde el teclado se cierra, incluso si solo cambio eso en tu programa.

    ResponderEliminar