Главная страница
Top.Mail.Ru    Яндекс.Метрика
Текущий архив: 2007.02.11;
Скачать: CL | DM;

Вниз

откуда взять описание типа TidIcmpClient?   Найти похожие ветки 

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

Взял описание примера на 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". Где его взять?


 
Сергей М. ©   (2007-01-23 11:18) [1]

Ге надо кго ни откуда брать.
Убери совсем эту строчку.


 
Elen ©   (2007-01-23 11:19) [2]


> cvg

Это
TidIcmpClient.OnReply (Sender:TComponent; const AReplyStatus:
TReplyStatus);

говорит о том что нужно описать этот обработчик, а не вызывать его :
И не забудем выставить соответствующий интервал ожидания ответа, по завершении которого (или при получении данных от пингуемого) вызывается обработчик:


 
cvg   (2007-01-23 11:25) [3]

Ну а как описать? Кстати, когда я убрал эту строчку, а вставил sleep(1000), программа заработала, но как-то странно: при первом нажатии кнопки выдает 15 или 16, а при последующих всегда ноль... Что бы это значило?


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


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


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


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


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


 
Elen ©   (2007-01-23 11:30) [5]


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

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


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

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


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

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

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


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

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


 
Elen ©   (2007-01-23 11:39) [9]


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

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


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

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


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

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


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

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


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

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


 
Elen ©   (2007-01-23 11:48) [14]


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

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

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


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

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


 
Elen ©   (2007-01-23 12:01) [16]


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

см. [8]


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

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


 
Elen ©   (2007-01-23 12:21) [18]


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


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

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.

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


 
Elen ©   (2007-01-23 12:22) [19]

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


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

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

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


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

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


 
Elen ©   (2007-01-23 13:05) [22]


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

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


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

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



Страницы: 1 вся ветка

Текущий архив: 2007.02.11;
Скачать: CL | DM;

Наверх




Память: 0.52 MB
Время: 0.038 c
1-1166611677
DinoRay
2006-12-20 13:47
2007.02.11
TreeView Drag&Drop непонятки


15-1169326330
kayman11111
2007-01-20 23:52
2007.02.11
спутник


15-1169410486
Kerk
2007-01-21 23:14
2007.02.11
Yandex Cards


15-1169457949
vitv
2007-01-22 12:25
2007.02.11
Сервер на Linux или Win2003


15-1169539069
vitv
2007-01-23 10:57
2007.02.11
Кто-нибудь читал книги Дж. Фостер?