В продолжении статьи по поиску компьютеров в сети, а также для проверки соединения с другим компьютером или сервером, то есть для проверки их доступности в сети (пингование) я решил написать данную статью. Для этого я подготовил похожий пример, но уже с использованием библиотеки ICS. Довольно мощная библиотека, которая поможет при работе с сетью, а также при работе с фтп-серверами. Для данной задачи нам понадобиться данная библиотека ICS, скачать ее можно тут. После того как Вы скачаете ее, установить данную библиотеку себе, а после установки появиться новая вкладка компонентов под название — FPiette, мы приступим к разработке самой программы. На данный момент из этой вкладки нам понадобится, пока что, только компонент — TPing. С помощью данного компонента мы и будем посылать на компьютер (сервер) пакет данных, размером, примерно по 32 байта. Технология поиска компьютеров в сети тоже самая, что я и описывал в прошлой статье, но с использованием только компонентов библиотеки ICS. Как Вы помните, пользователь указывает диапазон ip-адресов, которые необходимо сканировать. Также можно определить ip-адрес компьютера, на котором запущена программа, ну а если мы будем знать начало ip-адресов, то можно и самому составить диапазон сканирования. Я обратно покажу это все на конкретном ip-адресе, ну а для того, чтобы просканировать всю сеть, просто необходимо запустить все в цикл, то, что мы будем делать для конкретного ip-адреса. На каждый ip-адрес мы будем посылать, например, по 32 байта, ну а если ответ нам будет приходить (не будет никаких ошибок), то данный ip-адрес мы будем добавлять в наш список, что будет говорить о том, что данный компьютер, с таким ip-адресом, в сети существует.
Ну что, на форме у меня следующие компоненты:
- TListBox
- TPing
- TButton
В TListBox мы будем выводить ip-адреса, которые существуют в сети, то есть от которых пришел ответ. Компонент TPing нам понадобится собственно для посылки пакета данных на компьютер (сервер), а также обработку ответа, который придет. На событие OnClick кнопки я написал следующий код:
procedure TForm1.Button1Click(Sender: TObject);
begin
Ping1.Size:=32;
Ping1.Timeout:=1000;
Ping1.DnsLookup('localhost');
end;
С помощью Size - задаем количество байт, которые мы будет отправлять, например, на сервер.
С помощью Timeout - устанавливаем время, через которое прекращаем отправлять запрос.
С помощью DnsLookup - мы посылаем запрос на указанный хост, в данном случае мы воспользуемся localhost или 127.0.0.1.
У TPing есть событие OnDnsLookupDone, которое возникает при посылке, обработке запроса. Так вот, на данное событие мы напишем следующий код:
procedure TForm1.Ping1DnsLookupDone(Sender: TObject; Error: Word);
begin
if Error<>0 then
begin
exit;
end;
Ping1.Address:=Ping1.DnsResult;
ListBox1.Items.Add(Ping1.DnsResult);
Ping1.Ping;
end;
В переменной Error содержатся ошибки, например, если хоста, на который мы посылаем запрос не существует, то Error не будет равен 0, следовательно такого хоста не существует и в данном случае мы ничего не делаем. Если хост, ip-адрес существует, то он будет в DnsResult и мы его тогда добавляем в TListBox.
Как видите при работе с библиотекой ICS, а именно с компонентом тз данной библиотеке — TPing, ничего сложного нету. Все довольно просто. Оба примера достаточно просты, которые можно использовать в своих проектах. Кстати, программа, которая работает по похожему принципу поиска компьютеров в сети (сканирование диапазона ip-адресов, посылка им запроса с последующей обработкой) называется — FriendlyNetViewer. Довольно мощная программка для работы с сетью и очень интересная.