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

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

Альтернатива ReplyStatus в Indy 10


progmax ©   (2006-10-24 09:48:00) 

Когда-то писал пинговалку, используя компонент TIdIcmpClient:

function ping: string;
begin
IdIcmpClient1.Host:='192.168.2.1';
IdIcmpClient1.Ping;
if IdIcmpClient1.ReplyStatus.BytesReceived = 0 then rezult:='connect's off';
end;

Недавно поставил себе 10 версию Indy а в нем ReplyStatus.BytesReceived нету.
Подскажите пожалуйста, как организавать данную функцию на Indy 10?


корешь   (2006-11-28 21:37:00) [1]


> Недавно поставил себе 10 версию Indy а в нем ReplyStatus.
> BytesReceived нету.

Это не самое страшное в нем нет свойства TTL, а как без него построить путь до заданного хоста?


Орион   (2006-10-24 15:10:00) [2]

 TIcmpEcho = record
   Source,
   Status,
   RTTime: Longint;
   DataSize: Shortint;
   Reserved: Shortint;
   Data: Pointer;
   IPInfo: TIPInfo;
 end;

 TIPInfo = record
   TTL,
   TOS,
   IPFlags,
   OptSize: Byte;
   Options: Pointer;
 end;

function ExecutePing(IP: string): DWord;
var
 IcmpEcho: TIcmpEcho;
 IcmpFile: THandle;
 IPInfo: TIPInfo;
begin
 IcmpFile:=IcmpCreateFile;
 IPInfo.TTL:=TTL;
 with IPInfo do
 begin
  TOS:=0;
  IPFlags:=0;
  OptSize:=0;
  Options:=nil;
 end;
 Result:=IcmpSendEcho(IcmpFile, inet_addr(PChar(IP)), nil, 0, @IPInfo, @IcmpEcho, SizeOf(TIcmpEcho), DWord(WaitInterval));
 if not IsWinNT then IcmpCloseHandle(IcmpFile);


Код я писал очень, очень давно. Поэтосу он ужасный :)


Орион   (2006-10-24 15:07:00) [3]

> [3] progmax ©   (24.10.06 12:50)

можно.

function IcmpPCreateFile: THandle; stdcall; external 'ICMP.dll' name 'IcmpCreateFile';

function IcmpCloseHandle(ICMPHandle: THandle): Boolean; stdcall; external 'ICMP.dll' name 'IcmpCloseHandle';

function IcmpSendEcho(ICMPHandle: THandle; DestAddress: Longint; RequestData: Pointer; RequestSize: Word; RequestOptns, ReplyBuffer: Pointer; ReplySize, Timeout: DWord): DWord; stdcall; external 'ICMP.dll' name 'IcmpSendEcho';


+ MSDN


progmax   (2006-10-24 12:50:00) [4]

Мне нужно пингануть удаленный компьютер в консольном приложении. Я думал в модулях прописать IdIcmpClient и использовать этот компонент, но по какой-то причине у меня нету метода ReplyStatus.
Подскажите пожалуйста, может можно пингануть удаленный хост каким-то другим способом, более удобным для моего случая?


Орион   (2006-10-24 09:56:00) [5]

хотя стоп! как это нету ReplyStatus.BytesReceived?
У меня все есть :)

"Это не правильные пчелы, и они делают неправильный мед" (с)


Орион   (2006-10-24 09:55:00) [6]

событие OnReply

procedure TForm1. IdIcmpClient1Reply(ASender: TComponent;
 const AReplyStatus: TReplyStatus);
begin
  MessageDlg(IntToStr( AReplyStatus.BytesReceived), mtCustom, [mbOK], 0);
end;


Наверх

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