Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

откуда взять описание типа TidIcmpClient? [D7, XP]


Страницы:   1 2

cvg ©   (2007-01-23 11:13:00) 

Взял описание примера на Indy с http://www.citforum.ru/nets/articles/ping/.Написал так:

procedure TForm1.IdIcmpClient1Reply(ASender: TComponent;
 const AReplyStatus: TReplyStatus);
begin
ListBox1.Items.Add ('Reply:'+IntToStr (AReplyStatus.MsRoundTripTime));
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
Self.IdIcmpClient1.Host:='localhost';
Self.IdIcmpClient1.Ping;
TidIcmpClient.OnReply (Sender:TComponent; const AReplyStatus:TReplyStatus);
end;

В последней строчке (перед end'ом) она, естественно, говорит "Method identifier expected". Где его взять?


cvg   (2007-01-23 13:09:00) [1]

Да принципиально ничем -- просто разбираться придется...


Elen   (2007-01-23 13:05:00) [2]


> А пинговать в фоновом режиме во время выполнения других
> действий -- это ведь не обязательно в одельном потоке?

А почему нет? Чем потоки плохи?


cvg   (2007-01-23 12:57:00) [3]

3 Elen:
Да, спасибо, это я тормоз -- не посмотрел, что там в самом деле time возвращался в примере... А пинговать в фоновом режиме во время выполнения других действий -- это ведь не обязательно в одельном потоке?


TCrash   (2007-01-23 12:54:00) [4]

cvg   (23.01.07 11:57) [15]
Ваш Sleep тут рояли не играет. ОС регистрирует время отправки ICMP пакета(t1), затем регистрирует время получения отклика на него(t2). время отклика равно

result:=MillisecondsBetween(t1,t2);
С некоторыми издержками на преобразование типов и пр. Но это делает ОС, а не твоя программа, которую ты Sleep ^))


Elen   (2007-01-23 12:22:00) [5]

О пардон : еще IdIcmpClient1.ReceiveTimeout:=5000;
Чтоб небыло лишних вопросов ;)


Elen   (2007-01-23 12:21:00) [6]


>  но мне-то надо получить инфу, пропингивается этот адрес
> или нет. Как ее получить имеющимися у меня средствами?


Я могу поступить например так (Хотя у меня есть много способов пинга)

unit Unit1;

interface

uses    crtfox,
 Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
 Dialogs, StdCtrls, IdBaseComponent, IdComponent, IdRawBase, IdRawClient,
 IdIcmpClient;

type
 TForm1 = class(TForm)
   IdIcmpClient1: TIdIcmpClient;
   Button1: TButton;
   Edit1: TEdit;
   procedure IdIcmpClient1Reply(ASender: TComponent;
     const AReplyStatus: TReplyStatus);
   procedure Button1Click(Sender: TObject);
 private
   { Private declarations }
 public
   { Public declarations }
 end;

var
 Form1: TForm1;

implementation

{$R *.dfm}

procedure TForm1.IdIcmpClient1Reply(ASender: TComponent;
 const AReplyStatus: TReplyStatus);
begin
caption:=inttostr(AReplyStatus.BytesReceived);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
IdIcmpClient1.Host:=Edit1.Text;
IdIcmpClient1.Ping;
end;

end.

Кол-во обменянных байт в капшине.


cvg   (2007-01-23 12:05:00) [7]

2 Elen:
Ну ладно, пусть так, но мне-то надо получить инфу, пропингивается этот адрес или нет. Как ее получить имеющимися у меня средствами?


Elen   (2007-01-23 12:01:00) [8]


> но почему-то все равно первый раз выдвет 16, все последующме
> -- ноль.

см. [8]


cvg   (2007-01-23 11:57:00) [9]

Да, посмотреть на ReceiveTimeout я как-то не догадался... ну ладно, сделал я sleep(4000), но почему-то все равно первый раз выдвет 16, все последующме -- ноль. Непонятно...


Elen   (2007-01-23 11:48:00) [10]


> Почитать-то почитал, еще бы и понять...

Хм.
> И не забудем выставить соответствующий интервал ожидания
> ответа

Это значит выставить в IdIcmpClient1.ReceiveTimeout таймаут. Что еще сказать? Лучше скажи что ты не понял...


TCrash   (2007-01-23 11:44:00) [11]

Да.
И если это время окжется больше таймаута, то пинг не пройдет.


cvg   (2007-01-23 11:43:00) [12]

2 Elen:
Почитать-то почитал, еще бы и понять...


cvg   (2007-01-23 11:42:00) [13]

2 Crash:
то есть, 16 и ноль -- это время ожидания, что ли?


cvg   (2007-01-23 11:40:00) [14]

2 TCrash:
Вообше-то, в будущем это дело должно войти в большую прогу, где пинговаться будет адрес в Инете...


Elen   (2007-01-23 11:39:00) [15]


> А где же тогда реакция на событие OnReply?

А статейку почитать?


TCrash   (2007-01-23 11:37:00) [16]

При первом пинге происходит запрос по сетке различной информации, такой, например, как МАС адрес пингуемого устройства. Возможно что-то еще (просто не уверен).
Вот это и занимает некоторое время. После первого пинга эта инфа уже есть в кэши и запросов на нее не производится. потому такая петрушка со временем


cvg   (2007-01-23 11:36:00) [17]

Если не надо вставлять, то чего ж она ругается, что этот тип не определен? А при вставлении sleep'а руководствовался тем соображением, что там в описании ппримера сказано:
И не забудем выставить соответствующий интервал ожидания ответа, по завершении которого (или при получении данных от пингуемого) вызывается обработчик:
TidIcmpClient.OnReply (Sender:TComponent; const AReplyStatus:TReplyStatus);

Хотя, ели я эту строчку убрал... А где же тогда реакция на событие OnReply?


TCrash   (2007-01-23 11:32:00) [18]

cvg   (23.01.07 11:25) [3]
Это значит, что бы свою прогу гоняешь в сети со скоростью минимум 10 Мб/с


Elen   (2007-01-23 11:30:00) [19]


> Ну а как описать?

Ты уже это описал в начале procedure TForm1.IdIcmpClient1Reply(AS...


Сергей М.   (2007-01-23 11:30:00) [20]


> Ну а как описать?


Не надо ничего описывать - у тебя все уже описано.


> вставил sleep(1000)


Зачем вставил-то ?
Какими соображениями ты руководствовался при "вставлянии" ?


Страницы:   1 2

Наверх

Титульная страница Поиск, карта сайта Написать письмо