C#. Как определить состояние подключения к интернету

И немного рекламы: микроволновая печь neff на оллдиджитал

В библиотеке .NET нет функции для проверки состояния подключения к интернету. Для проверки состояния и получения некоторых настроек можно использовать функцию InternetGetConnectedState из библиотеки WINAPI. Эту функцию можно использовать для различных протоколов, типа: Gopher, FTP и HTTP. В использовании InternetGetConnectedState нет ничего сложного. Эта функция импортируется из библиотеки WININET и после использования возвращает True или False, при этом в заданную переменную записывается значение, которое впоследствии сравнивается с константами.

Функция позволяет определять посредством чего выполнено подключение к интернету (модем или LAN), используется ли proxy и установлен ли RAS(Remote Access Service).

Первым делом создаем класс InternetConnection и задаем константы:

[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
}

Импортируем нужную нам функцию из библиотеки WININET:

[DllImport("WININET", CharSet = CharSet.Auto)]
static extern bool InternetGetConnectedState(ref InternetConnectionState lpdwFlags, int dwReserved);

Пишем метод Init, в котором будет проходить вся инициализация:

public void Init()
{
    InternetConnectionState flags = 0;
    isInternetConnected = InternetGetConnectedState(ref flags, 0);
    isUsingModem = (flags & InternetConnection-State.INTERNET_CONNECTION_MODEM) != 0;
    isUsingLAN = (flags & InternetConnectionState.INTERNET_CONNECTION_LAN) != 0;
    isOffline = (flags & InternetConnection-State.INTERNET_CONNECTION_OFFLINE) != 0;
    isUsingProxy = (flags & InternetConnection-State.INTERNET_CONNECTION_PROXY) != 0;
    isRasEnabled = (flags & InternetConnectionState.INTERNET_RAS_INSTALLED) != 0;
}

После этого, доступ к переменным можно получить таким вот образом:

InternetConnection inet = new InternetConnection();
inet.Init();
Console.WriteLine("Соединение с интернетом: " + inet.IsInternetConnected);
Console.WriteLine("В оффлайне: " + inet.IsOffline);
Console.WriteLine("Посредством модема: " + inet.IsUsingModem);
Console.WriteLine("Посредством LAN: " + inet.IsUsingLAN);
Console.WriteLine("Используется  proxy: " + inet.IsUsingProxy);
Console.WriteLine("Установлен ли RAS: " + inet.IsRasEnabled);

Класс InternetConnection вы можете использовать в своих программах для определения подключения к интернету.

Удачного вам кодинга. Исходный код тестового проекта.

Популярность: 10%

Теги: , ,

Если у вас возникли вопросы, вы можете оставить их в комментариях

Комментарии к статье

5 Ответов на “C#. Как определить состояние подключения к интернету”

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

(обязательно)

(обязательно)


 

MAXCACHE: 0.32MB/0.00031 sec