![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Альтернатива 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;