Шаг 38.
Компонент TNMEcho

    На этом шаге мы рассмотрим компонент TNMEcho.

    Компонент применяется для отсылки текстовых сообщений на эхо-сервер и получения этого сообщения обратно в соответствии со стандартом RFC 862. Этот компонент обычно применяется для тестирования и настройки сети, поскольку мы можем оценить время ответа сервера, которое помещается в свойство ElapsedTime. Это свойство - единственное собственное свойство компонента, остальные наследуются.

    Перед отправкой сообщения должно быть установлено соединение с сервером. Для этого нужно задать имя сервера или его адрес в свойстве Host, а в свойстве Port определить соответствующий порт (обычно серверы эхо "слушают" 7-й порт). После этого нужно вызвать метод Connect. Для отправки сообщения нужно использовать метод Echo. В случае успеха вы должны получить от сервера эхо ту строку, которую вы передавали в качестве параметра методу Echo. После этого, для завершения связи вы должны вызвать метод Disconnect. Все методы, кроме метода Echo, компонент наследует.


    Пример. Создаем новое приложение Delphi и помещаем на форму два поля редактирования, компонент ТМеmо, четыре командные кнопки, три метки и компонент TNMEcho.


Рис.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.




Предыдущий шаг Содержание Следующий шаг