• Программинг

Нужны источники бесперебойного питания?

Источники бесперебойного питания от дизельстор

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

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

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

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

1 [Flags]
2 public enum InternetConnectionState : int
3 {
4     INTERNET_CONNECTION_MODEM = 0x1,
5     INTERNET_CONNECTION_LAN = 0x2,
6     INTERNET_CONNECTION_PROXY = 0x4,
7     INTERNET_RAS_INSTALLED = 0x10,
8     INTERNET_CONNECTION_OFFLINE = 0x20,
9     INTERNET_CONNECTION_CONFIGURED = 0x40
10 }

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

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

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

1 public void Init()
2 {
3     InternetConnectionState flags = 0;
4     isInternetConnected = InternetGetConnectedState(ref flags, 0);
5     isUsingModem = (flags & InternetConnection-State.INTERNET_CONNECTION_MODEM) != 0;
6     isUsingLAN = (flags & InternetConnectionState.INTERNET_CONNECTION_LAN) != 0;
7     isOffline = (flags & InternetConnection-State.INTERNET_CONNECTION_OFFLINE) != 0;
8     isUsingProxy = (flags & InternetConnection-State.INTERNET_CONNECTION_PROXY) != 0;
9     isRasEnabled = (flags & InternetConnectionState.INTERNET_RAS_INSTALLED) != 0;
10 }

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

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

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