На этом шаге мы рассмотрим компонент TNMEcho.
Компонент применяется для отсылки текстовых сообщений на эхо-сервер и получения этого сообщения обратно в соответствии со стандартом RFC 862. Этот компонент обычно применяется для тестирования и настройки сети, поскольку мы можем оценить время ответа сервера, которое помещается в свойство ElapsedTime. Это свойство - единственное собственное свойство компонента, остальные наследуются.
Перед отправкой сообщения должно быть установлено соединение с сервером. Для этого нужно задать имя сервера или его адрес в свойстве Host, а в свойстве Port определить соответствующий порт (обычно серверы эхо "слушают" 7-й порт). После этого нужно вызвать метод Connect. Для отправки сообщения нужно использовать метод Echo. В случае успеха вы должны получить от сервера эхо ту строку, которую вы передавали в качестве параметра методу Echo. После этого, для завершения связи вы должны вызвать метод Disconnect. Все методы, кроме метода Echo, компонент наследует.
Рис.1. Приложение на этапе разработки
Метки используются для пояснения назначения полей редактирования и поля мемо. Присвоим свойствам Caption этих меток значения Сервер, Строка для отправки, Ответ сервера (рисунок 1). В одном из полей редактирования нужно задать имя или IP-адрес сервера эхо, а во втором поле ввести отправляемую на сервер символьную строку. После этого, сначала, вам нужно связаться с сервером, для чего щелкнуть на кнопке Подключиться. А затем щелкнуть на кнопке Отправить. Оставшиеся две кнопки Отключиться и Прекратить выполняют обратные рассмотренным двум кнопкам действия.
Обработчики событий OnClick первых двух командных кнопок приводятся ниже. В них вызываются соответствующие методы Connect и Disconnect. Перед вызовом метода Connect свойству Host присваивается значение свойства Text поля редактирования Edit1.
procedure TForm1.Button1Click(Sender: TObject); //Подключение к серверу. begin NMEcho1.Host := Edit1.Text; NMEcho1.Connect; end; procedure TForm1.Button2Click(Sender: TObject); //Отключение от сервера begin NMEcho1.Disconnect; end;
Обработчик нажатия на кнопку Отправить приводится ниже.
procedure TForm1.Button3Click(Sender: TObject); //Кнопка Отправить begin Memo1.Lines.Add(NMEcho1.Echo(Edit2.Text)+'время ['+ FloatToStr(NMEcho1.ElapsedTime)+']'); end;
Эта процедура записывает в поле мемо ответ сервера и время ответа сервера в миллисекундах. Собрав небольшую статистику по времени ответа, вы сможете составить представление о скорости реакции сервера.
Ниже приведен листинг нашего примера.
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, Psock, NMEcho; type TForm1 = class(TForm) Edit1: TEdit; Label1: TLabel; Button1: TButton; Button2: TButton; Label2: TLabel; Edit2: TEdit; Memo1: TMemo; Label3: TLabel; Button3: TButton; Button4: TButton; NMEcho1: TNMEcho; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure Button3Click(Sender: TObject); procedure Button4Click(Sender: TObject); private { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); //Подключение к серверу. begin NMEcho1.Host := Edit1.Text; NMEcho1.Connect; end; procedure TForm1.Button2Click(Sender: TObject); //Отключение от сервера begin NMEcho1.Disconnect; end; procedure TForm1.Button3Click(Sender: TObject); //Кнопка Отправить begin Memo1.Lines.Add(NMEcho1.Echo(Edit2.Text)+'время ['+ FloatToStr(NMEcho1.ElapsedTime)+']'); end; procedure TForm1.Button4Click(Sender: TObject); //Кнопка Прекратить begin NMEcho1.Abort; end; end.
На следующем шаге мы рассмотрим компонент TNMFinger.