RSS 2.0 Atom 1.0 CDF  
JASoft.org - Detectar si hay conectividad en el equipo (Método 2)
El blog de José Manuel Alarcón Aguín. Programación .NET y mucho más...
 

En mi post anterior sobre este tema hablé de un primer método de detección basado en la APi de Windows. Hoy me toca hablar de otro similar, si bien usando una API completamente diferente. Los restantes métodos que veremos no necesitan ya el uso de la API.

En esta ocasión usaremos la API del servicio de notificación de eventos del sistema, o sea, la System Event Notification Service (SENS) API. En concreto haremos uso de la función IsNetworkAlive, que se define así:

[DllImport("sensapi.dll")]
private static extern bool IsNetworkAlive(ref uint flags);

Este método devuelve verdadero o falso en función de si hay o no conexión a la red. ¡Ojo!, a la red, no necesariamente a Internet, pero en muchas ocasiones lo que querremos es eso (si trabajamos sólo en una red local).

Así, podemos definir nuestra propiedad IsConnected con esta función así:

public static bool IsConnected2
{
    get
    {
        uint flags = 0;
        return IsNetworkAlive(ref flags);
    }
}

Lo interesante de esta función es que el parámetro que toma es un indicador por referencia que devuelve un valor que nos permite averiguar si la conexión actual es a través de una tarjeta de red o mediante un acceso telefónico remoto, para lo cual se definen estas dos constantes:

private const int NETWORK_ALIVE_LAN = 0x00000001; 
private const int NETWORK_ALIVE_WAN = 0x00000002; 

Se puede comparar (comparación binaria) el valor devuelto en este parámetro con estos valores y saber si estamos conectados a una red local, a través de RAS o ambas cosas.

Según indican en la documentación de MSDN esta función es más lenta que la anterior, pero tiene la ventaja de que permite distinguir estos dos casos y además detecta las conexiones RAS de inmediato.

En breve más :-)

Tuesday, January 29, 2008 6:04:19 PM (Hora estándar romance, UTC+01:00)  #    Comments [5]   Programación  |  Trackback
Thursday, January 31, 2008 11:03:50 AM (Hora estándar romance, UTC+01:00)
Hola, ¿ la API System Event Notification Service (SENS) viene sólo en Windows Vista ?

Saludos.
espinete
Thursday, January 31, 2008 11:21:40 AM (Hora estándar romance, UTC+01:00)
Hola:

Qué yo sepa apareción con Windows 2000 así que viene en todos los sistemas actuales...

Saludos

JM.
Friday, February 01, 2008 9:06:11 AM (Hora estándar romance, UTC+01:00)
Sí que aparece en un Windows XP dicha API. A ver si tengo tiempo para probar esa función, que aunque el rendimiento sea menor que le método 1, parece interesante.

El método 3 para casos puntuales puede estar bien :-)

Saludos y gracias.
espinete
Thursday, May 08, 2008 12:07:06 PM (Hora de verano romance, UTC+02:00)
Me gustaria saber si hay alguna API para .NET que me diga si un equipo en la red cualquiera esta accesible.
Gracias.
Jose Vicente Sancho
Thursday, May 08, 2008 5:09:45 PM (Hora de verano romance, UTC+02:00)
Claroq ue lo hay: puedes hacer un ping, mira aquí como se hace:

http://www.jasoft.org/blog/PermaLink,guid,8c4c07bd-483d-4794-ab9d-bea5449414fc.aspx

Saludos

JM
Name
E-mail
Home page

Comment (Some html is allowed: a@href@title, b, i, strike, strong, u) where the @ means "attribute." For example, you can use <a href="" title=""> or <blockquote cite="Scott">.  

Enter the code shown (prevents robots):

Live Comment Preview
Copyright © 2008 José Manuel Alarcón Aguín. All rights reserved.