Главная страница
    Top.Mail.Ru    Яндекс.Метрика
Форум: "Начинающим";
Текущий архив: 2007.02.11;
Скачать: [xml.tar.bz2];

Вниз

откуда взять описание типа 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;
Скачать: [xml.tar.bz2];

Наверх





Память: 0.5 MB
Время: 0.042 c
1-1164768552
PHPDeveloper
2006-11-29 05:49
2007.02.11
Bitmap


2-1169405647
Decoy
2007-01-21 21:54
2007.02.11
Помогите написать клиент


11-1147774459
grm
2006-05-16 14:14
2007.02.11
2.35 bug tthread


15-1169218139
oldman
2007-01-19 17:48
2007.02.11
Почтовый ящик глюкнул, извините, пожалуйста...


2-1169540039
cvg
2007-01-23 11:13
2007.02.11
откуда взять описание типа TidIcmpClient?





Afrikaans Albanian Arabic Armenian Azerbaijani Basque Belarusian Bulgarian Catalan Chinese (Simplified) Chinese (Traditional) Croatian Czech Danish Dutch English Estonian Filipino Finnish French
Galician Georgian German Greek Haitian Creole Hebrew Hindi Hungarian Icelandic Indonesian Irish Italian Japanese Korean Latvian Lithuanian Macedonian Malay Maltese Norwegian
Persian Polish Portuguese Romanian Russian Serbian Slovak Slovenian Spanish Swahili Swedish Thai Turkish Ukrainian Urdu Vietnamese Welsh Yiddish Bengali Bosnian
Cebuano Esperanto Gujarati Hausa Hmong Igbo Javanese Kannada Khmer Lao Latin Maori Marathi Mongolian Nepali Punjabi Somali Tamil Telugu Yoruba
Zulu
Английский Французский Немецкий Итальянский Португальский Русский Испанский