Познавательный блог Мобильная врсия

Страницы

Промо

Как определить RAS соединение с инетом на c++

Как определить RAS соединение с интернетом на c++.

RAS - Remote Access Service. Позволяет удаленно подключаться к сетям с использованием удаленного соединения (модем). Именно так я попадаю в Интернет. Запускаю удаленный доступ. Он звонит и входит в сеть.

Мы объявили подключение windows.h для того, чтобы пользоваться типами переменных Windows, например тип DWORD там описан. Подключили ras.h для доступа к описанию функций. iostream.h просто объявление потоков для вывода на экран. Мне удобно, хотя можно и подругому, например stdio.h - printf, но мне так удобнее. Conio.h для функции getch(), она задерживает выполнение программы до нажатия клавиши.
Итак, первым делом мы объявляем массив типа RASCONN из 20 элементов. Почему 20 ? Мне так хочется. Вообще можно сколько угодно. Но на компьютере обычно модем один и соединение одно. Так что больше 2 нужно точно. Почему больше 2 ? В конце при проверке программы увидите ! Эта структура содержит информацию о соединении. Вот так она описана:

typedef struct _RASCONN {
DWORD dwSize;
HRASCONN hrasconn;
TCHAR szEntryName[RAS_MaxEntryName + 1];
#if (WINVER >= 0x400)
CHAR szDeviceType[ RAS_MaxDeviceType + 1 ];
CHAR szDeviceName[ RAS_MaxDeviceName + 1 ];
#endif
} RASCONN ;

Дальше мы объявили две переменные. Они нам понадобятся. Потом в первый элемент структуры в поле dwSize мы поместили размер 1 записи из массива структур, т.е. размер одной структуры. Зачем ? Посмотрите описание структуры, при разных версиях, размер разный. Функция sizeof() как раз этот размер и вычислила. И весь размер массива вычислили. Нужен он дальше.

RasEnumConnections проверяет наличие соединения. Результат у нее как раз не количество соединений, а успешность обращения к динамической библиотеке. Ведь её может не быть или она может быть испорчена. В эту функцию мы передаем массив ras, указатель на размер массива. И указатель на число куда вернется количество соединений. Почему указатель, потому что это будет использовано для возврата результата. Как иначе, если функция возвращает успешность своего вызова?

Если функция выполнена, то в dNumber будет записано количество соединений. Если соединения есть, то в массив вернется о них информация. С помощью for мы пробегаем по массиву и выводим информацию.

А теперь соберите и запустите программу. Если у Вас нет соединения, то на экране появится 0 и будет ждать нажатия клавиши. А теперь запустите соединение. В момент проверки пароля для входа в систему можете запустить программу. Она покажет вам 1 и имя соединения, которое описано в DialUp.

И последнее. Как проверить два соединения с одним модемом. Сделайте соединение с альтернативным именем, чтобы их было два. Запустите с первым именем. После связи. Запустите со вторым. Вот второе и не запустится. Вам сообщат о том, что модем используется - ошибка 6... В этот момент запустите Вашу программу и она покажет два соединения с именами.

Пример:

#include <windows.h>
#include <stdio.h>
#include <ras.h>

BOOL IsInternetConnected ()
{
DWORD nRasDevices = 20;
DWORD nSize = 20;
RASCONN rasconnected [10]; // Ras Connected struct
rasconnected[0].dwSize = sizeof(RASCONN);
RasEnumConnections(rasconnected, &nSize, &nRasDevices );
return ( BOOL (nRasDevices) );
}

int main(int argc, char* argv[])
{
if (IsInternetConnected ())
{
printf("connect");}
else
printf("no connect");
getchar();
return 0;
}

Написать комментарий








Поиск по сайту

Статистика

Мета

  Разработка и дизайн — StvPromo.ru