15 мая 2023 года "Исходники.РУ" отмечают своё 23-летие!
Поздравляем всех причастных и неравнодушных с этим событием!
И огромное спасибо всем, кто был и остаётся с нами все эти годы!

Главная Форум Журнал Wiki DRKB Discuz!ML Помощь проекту


CPing -- Простой ping хоста из под Windows 95 и Windows NT

Автор Robert Hamilton.

Компилятор: Visual C++ 5.0

Что он делает?

    Впринципе это аналог встроенной в Windows команды ping. Данная команда позволяет узнать - работает ли в интернете нужный сервер. Главный плюс данного класса в том, что он работает сразу в двух операционных системах Windows 95 и Windows NT, чего не делают его аналоги.

 

Как его использовать?

  • Создайте MFC проект

      Не указывайте визарду, что хотите использовать Windows Sockets
      Не включайте #include afxsock.h
      Не вызывайте AfxSocketInit()

  • Скопируйте CPing.cpp и CPing.h в директорию Вашего проекта
  • Добавьте CPing.cpp в Ваш проект
  • В установках C++ Вашего проекта удалите /Yu"stdafx.h" в отладочной и релизовой версиях
  • добавьте в Ваш stdafx.h #include <winsock.h>
  • В закладке линковщика добавьте WSOCK32.LIB
  • Добавьте #include "CPing.h" во все файлы которым поторебуется использовать класс CPing
  • Создайте объект CPing и вызовите функцию-член Ping()

 

Функция CPing::Ping()

    CPing::Ping

      BOOL Ping( char* strHost );

      Возвращаемое значение

      Ненулевое, если host указанный в strHost ответил; иначе 0.

      Параметры

      strHost   указатель на имя или IP адрес пингуемого узла (строка должна завершаться нулём). Если strHost указывает на IP адрес, то он должен быть в формате "XXX.XXX.XXX.XXX".

      Примечания

      Если имя узла, указанного в strHost не может быть вычислено, функция вернёт 0. Возвращаемое значение в виде 0 так же может указывать на то что узел не отвечает.

      Пример

      Следующий пример демонстрирует использование CPing::Ping.

      
      // пример для CPing::Ping
      
      CPing ping;
      
      //пингуем шлюз
      BOOL bResult = ping.Ping("192.168.0.254");
      
      if( bResult )
      {
      	//шлюз работает нормально
      	//давайте пинганём пару сайтов.
      	if(ping.Ping("www.codeguru.com") ||
                                    ping.Ping("www.netscape.com"))
      	{
      		//работают нормально
      		AfxMessageBox("Everything is A OK.");
      	}
      	else
      	{
      		//ошибка DNS или узлы не отвечают.
      		AfxMessageBox("Can't ping outside the subnet.
                       It may be a DNS problem or the ISP's fault.");
      	}
      }
      else
      {
      	//тогда шлюз выключен
      	AfxMessageBox("The gateway or router is down.");
      }
      

 

Некторые понятия, которые необходимо запомнить

  • Этот класс использует ICMP.DLL. поэтому если у Вас нет этого файла, то установите его.

  • Этот класс динамически загружает ICMP.DLL в конструктор. Поэтому не создавайте несколько объектов CPing!

  • Этот класс также вызывает WSAStartup(); в конструкторе и WSACleanup(); в деструкторе. Поэтому не создавайте несколько объектов CPing! Также, если Ваше приложение вызывает WSAStartup() и WSACleanup(), то я предлагаю вытереть вызовы WSAStartup() и WSACleanup() в моём конструкторе и деструкторе.
  • Данный класс не использует для своей работы другие MFC классы. Поэтому если Вы не используете в своём приложении MFC, то прийдётся создать файл StdAfx.h file или взять #include "StdAfx.h" не из моего класса. Надо будет добавить #include <windows.h> и #include <winsock.h>.
  •  

Скачать откомпилированную демонстрашку - 67.2 KB

Скачать исходник демонстрашки - 28.6 KB

Скачать исходник - 1.93 KB