Лекция: Лекція № 12

Для следующего примера нам придется расширить возможности Delphi. Те компоненты, которые доступны на палитре — это только основа. Вы можете расширять их количество и качество по своему усмотрению. Для этого в сети Интернет много библиотек компонентов, которые можно подключать к Delphi. Среди них есть платные, а есть и бес­платные, которые по качеству не отличаются даже от родных, написанных и Borland.

Сейчас мы напишем собственную утилиту Ping. Для ее написания нам понадобится очень сильная и бесплатная библиотека Internet Component Suite (ICS). Ее вы можете найти по адресу www.rtfm.be/fpiette/indexuk.htm или на компакт-диске к книге в директории Компоненты\Internet\ICS. Скопируйте файлы себе на диск, например в C:\components, разархивируйте их — скоро они вам пригодятся.

Теперь запустите Delphi. Как всегда, при запуске будет создан новый проект. Он нам пока не нужен, поэтому закройте его (File\Close All), Теперь нужно открыть с помощью Delphi библиотеку, которую вы скачали из сети или взяли на компакт-диске. Файл, который надо открыть, называется IcsdelXX.dpk, где XX— номер версии установленного у вас Delphi. Если у вас стоит Delphi 6 или Delphi 7, то можно открыть Icsclel50.dpk. В библиотеке нет файлов для этих версий, но 5-й установится без проблем.

 

Рис. 4.13. Окно библиотеки компонентов

 

Когда вы откроете библиотеку, перед вами появится окно, как на рис. 4.13. В этом окне нажмите кнопку Install, чтобы Delphi откомпилировал пакет и пpoинсталлировал его.


 

Если вы все сделали правильно, то должно появиться окно с перечислением новых установленных компонентов (рис. 4.14).

 

 

Рис. 4.14. Установка завершена

 

Теперь нужно указать Delphi, где находятся файлы пакета, чтобы он мог при компиляции проектов найти все необходимое. Для этого выберите в меню Tools пункт Environment Options. Перед вами появится окно настроек Delphi, Перейдите на вкладку Library (рис. 4.15).

 

Рис. 4.15. Настройка Delphi

 

Щелкните на кнопке с тремя точками напротив строки Library path, и вы увидите окно, как на рис. 4.16. Внизу окна есть строка ввода. Введите туда путь к директории, куда вы разархивировали пакет (у меня это C:\componcnts\ Delphi\Vc32). Нажмите кнопку Add. Теперь можно закрывать все открытые окна, нажимая многочисленные ОК.

 
 

 

Рис. 4.16. Добавление директории пакетов

 

На компонентной палитре появилась новая закладка FPiette. Все компоненты этой библиотеки очень быстрые и достаточно хорошие. Единственный обнаруженный мной недостаток — глючит компонент FTPClient.

 

 
 

Рис. 4.17. Закладка FPiette

 

Все необходимые компоненты установлены, так что теперь переходим к программированию. Опять закройте все окна, и на вопросы о сохранении изменений в пакете отвечайте Да. Создайте новый проект. Перемесите на форму два компонента TLabel и два TEdit. Разместите их так, как показано на рис. 4.18.

У Label1 измените свойство Caption на «Имя компьютера», а у Iabel2 — на «Размер пакета». Напротив Label1 должен стоять Edit1. Сюда вы будете вводить IP-адрес или имя компьютера, который надо пропинговать. В Edit2 будем вводить размер пакета.

Еще не помешает перенести на форму компонент RichEdit с закладки Win32, и него мы будем записывать результат выполнения опеции. И наконец, разместите на форме компонент ping с закладки FPiette, который и будет производить пинг (рис. 4.19).

 
 

Рис. 4.18. Форма будущей программы

 

 

 
 

Рис. 4.19. Свойства компонента Ping

 

Все, форма готова. Осталось только написать код, которого не так уж и много.

Создайте обработчик события onclick кнопки. Там нужно написать следующее:

 

procedure TPingForm.Button1Click (Sender: TObject)

begin

RichEdit1.Lines.Add('Поиск''' + Edit1.Text + '''');

Ping1.Size:=StrToInt(Edit2.Text);

Ping1.DnsLookup (Edit1.Text);

end;

 

Здесь первой строкой через компонент RichEdit выводится сообщение о начале пинга. Вторая строка устанавливает размер пакета пинга (ping1.size), как указано в Edit2, Последняя строка запускает поиск ком­пьютера через DNS (ping1.DnsLookup). Даже если вы введете IP-адрес, поиск в базе DNS ничего плохого не сделает.

Теперь выделите компонент Ping1 и создайте для него обработчик события OnDnsLookupDone (когда закончен поиск в базе DNS). Здесь напишите следующее:

 

procedure TPingForm.Ping1DnsLookupDone (Sender: TObject; Error: Word)

begin

//Если произошла ошибка, то...

if Error <> 0 then

begin

//Вывести сообщение об ошибке

RichEdit1.Lines.Add('Хост не найден ''' + Edit1.Text + '''');

//Выход

Exit;

end;

//Если ошибок не было, то выводим в RichEdit1 результат поиска

RichEdit1.Lines.Add('Хост ''' + Edit1.Text +''' — '+Ping1.DnsResult); //Устанавливаем //свойство Address компонента Ping равным адресу, найденному в базе DNS

Ping1.Address:= Ping1.DnsResult;

//Запускаем Ping

Ping1.Ping;

end;

 

Чтобы легче было разобраться с его содержимым, листинг снабжен комментариями. В этой процедуре ничего сложного нет, и комментариев будет достаточно для понимания происходящего.

Нам еще нужно выловить результат пинга. Для этого создайте обработчик события OnEchoReply для компонента Ping1:

 

procedure TPingForm.Ping1EchoReply(Sender, Icmp: TObject; Error: Integer)

begin

if Error <> 0 then

RichEdit1.Lines.Add ('Не могу выполнить операцию ping: ' + Ping1.ErrorString)

else

RichEdit1.Lines.Add('Получено '+intToStr(Pingl.Reply.DataSize)

+' байт от '+Ping1.HostIP + ' за ' + IntToStr(Ping1.Reply.RTT) + ' миллисекунд');

end;

 

Здесь выводится результат пинга. Если Error не равно 0, то показывается сообщение об ошибке. Если равно, то показывается время, за которое прошел ping.

И напоследок проведем косметическую операцию. Создайте обработчик события OnEchoRequest для компонента ping1. В нем напишите следующее:

 

procedure TPingForm.Ping1EchoRequest(Sender, Icmp: TObject)

begin

RichEdit1.Lines.Add('Посылка' + IntToStr(Ping1.Size) + ' байтов на ' + Ping1.Hostname);

end;

 

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

 
 

Рис. 4.20. Результат работы утилиты Ping

 

Теперь в вашем арсенале появилась еще одна утилита собственного изготовления, которая обязательно должна присутствовать у любого компьютерщика, хоть как-то связанного с сетью.

Для чего нужен пинг? Часто возникает вопрос: «Как узнать IP-адрес сервера?» Самый простой способ сделать это — ping. Просто пингуешь символьное имя сервера, а ваша утилита сразу показывает нам его IP-адрес.

Лекція № 12

еще рефераты
Еще работы по информатике