Определение состояния подключения к интернету

      Определить, подключен ли компьютер к интернету, можно при помощи метода NetworkInformation.NetworkInterface.GetIsNetworkAvailable() из библиотеки System.Net. Следует заметить, что если компьютер подключен к локальной сети, то этот способ окажется бесполезным, так как метод указывает, доступно ли сетевое подключение и не различает подключения к интернету от локального. В данном методе сетевое подключение считается доступным, если какой-либо из сетевых интерфейсов отмечен как "активный" и не является интерфейсом замыкания на себя или туннельным интерфейсом.
      В этом случае можно воспользоваться функцией Windows API InternetGetConnectedState. API функция содержится в библиотеке «wininet.dll» и возвращает «true», если присутствует соединение с интернетом, иначе «false», при этом в заданную переменную записывается значение, которое впоследствии сравнивается с константами, для определения посредством чего выполнено подключение к интернету (модем или LAN), используется ли proxy и установлен ли RAS(Remote Access Service). Ниже приведены основные константы, с которыми можно выполнить сравнение возвращаемого значения от данной функции.
  • INTERNET_CONNECTION_MODEM = 0x1 – компьютер подключен к сети посредством модема;
  • INTERNET_CONNECTION_LAN = 0x2 - компьютер подключен к сети посредством LAN;
  • INTERNET_CONNECTION_PROXY = 0x4 - компьютер подключен к сети с использованием прокси;
  • INTERNET_RAS_INSTALLED = 0x10 - установлен ли RAS (Remote Access Service).
  • INTERNET_CONNECTION_OFFLINE = 0x20 – компьютер не в сети.
      Создайте проект «Windows Form» в «Microsoft Visual Studio» и добавьте на главную форму вашего проекта следующие элементы управления:
  • System.Windows.Forms.TextBox textBox1 – текстовое поле для вывода состояния соединения с интернетом;
  • System.Windows.Forms.TextBox textBox2 - текстовое поле для вывода состояния сетевого подключения;
  • System.Windows.Forms.TextBox textBox3 - текстовое поле для вывода состояния подключения компьютера к сети посредством модема;
  • System.Windows.Forms.TextBox textBox4 - текстовое поле для вывода состояния подключения компьютера к сети посредством LAN;
  • System.Windows.Forms.TextBox textBox5 - текстовое поле для вывода состояния подключения компьютера к сети с использованием прокси;
  • System.Windows.Forms.TextBox textBox6 - текстовое поле для вывода значения, установлен ли RAS (Remote Access Service).
У вас получится приведенный ниже пример.
      Сделайте двойной клик левой клавишей мыши по любому свободному месту главной формы, вы перейдете в редактор кода с установкой курсора в автоматически созданном методе «Form1_Load», события «Load», выполняющегося при загрузке формы. Вставьте в тело данного метода приведенный ниже листинг вывода состояния сетевого подключения.
InternetConnection inet = new InternetConnection();
inet.Init();
textBox1.Text = inet.IsInternetConnected.ToString();
textBox2.Text = inet.IsOffline.ToString();
textBox3.Text = inet.IsUsingModem.ToString();
textBox4.Text = inet.IsUsingLAN.ToString();
textBox5.Text = inet.IsUsingProxy.ToString();
textBox6.Text = inet.IsRasEnabled.ToString();
      Так же добавьте класс с «InternetConnection», в котором реализованы необходимые константы и вызов Windows API функции «InternetGetConnectedState».
public class InternetConnection
{
    [System.Runtime.InteropServices.DllImport("WININET",
        CharSet = System.Runtime.InteropServices.CharSet.Auto)]
    static extern bool InternetGetConnectedState(ref InternetConnectionState lpdwFlags,
      int dwReserved);

    [Flags]
    public enum InternetConnectionState : int
    {
        INTERNET_CONNECTION_MODEM = 0x1,
        INTERNET_CONNECTION_LAN = 0x2,
        INTERNET_CONNECTION_PROXY = 0x4,
        INTERNET_RAS_INSTALLED = 0x10,
        INTERNET_CONNECTION_OFFLINE = 0x20,
        INTERNET_CONNECTION_CONFIGURED = 0x40
    }

    private bool isInternetConnected;
    private bool isUsingModem;
    private bool isOffline;
    private bool isUsingLAN;
    private bool isUsingProxy;
    private bool isRasEnabled;
 
    public bool IsInternetConnected
    {
        get { return isInternetConnected; }
    }

    public bool IsUsingModem
    {
        get { return isUsingModem; }
    }

    public bool IsOffline
    {
        get { return isOffline; }
    }

    public bool IsUsingLAN
    {
        get { return isUsingLAN; }
    }

    public bool IsUsingProxy
    {
        get { return isUsingProxy; }
    }

    public bool IsRasEnabled
    {
        get { return isRasEnabled; }
    }       

    public void Init()
    {
        InternetConnectionState flags = 0;
        isInternetConnected = 
  InternetGetConnectedState(ref flags, 0);
        isUsingModem = 
  (flags & InternetConnectionState.INTERNET_CONNECTION_MODEM) != 0;
        isUsingLAN = 
  (flags & InternetConnectionState.INTERNET_CONNECTION_LAN) != 0;
        isOffline = 
  (flags & InternetConnectionState.INTERNET_CONNECTION_OFFLINE) != 0;
        isUsingProxy =
  (flags & InternetConnectionState.INTERNET_CONNECTION_PROXY) != 0;
        isRasEnabled =
  (flags & InternetConnectionState.INTERNET_RAS_INSTALLED) != 0;
    }
}
      Запустите проект, нажав на клавишу «F5». После успешной компиляции и запуска вашего проекта у вас откроется главная форма вашего проекта с характеристиками вашего сетевого подключения.
Если вы отключитесь от локальной сети, то у вас будет следующий результат:

Комментариев нет:

Отправить комментарий

Большая просьба, не писать в комментариях всякую ерунду не по теме!