Добрый день.
Пытаюсь перевести свое приложение на использование Indy10, но возникли проблемы с реализацией пинга.
Под Indy9 (Delphi7) успешно работает код:
procedure TForm1.Button1Click(Sender: TObject);
begin
IdIcmpClient1.Host:=Edit1.Text;
IdIcmpClient1.Ping;
Memo1.Lines.Add(IdIcmpClient1.ReplyStatus.FromIpAddress);
end;
В Delphi 2006, такой код не катит. Исправляю его на следующий:
procedure TForm1.Button1Click(Sender: TObject);
begin
IdIcmpClient1.Host:=Edit1.Text;
IdIcmpClient1.Ping;
Memo1.Lines.Add(IdIcmpClient1.Receive(0).FromIpAddress);
Memo1.Lines.Add(IntToStr(IdIcmpClient1.Receive(5000).BytesReceived));
end;
Но в качестве результата получаю одни нули.
Пытаюсь выяснить причину ошибки, использую конструкцию:
if IdIcmpClient1.Receive(5000).ReplyStatusType=rsEcho
then ShowMessage('OK');
if IdIcmpClient1.Receive(5000).ReplyStatusType=rsError
then ShowMessage('NOT OK');
if IdIcmpClient1.Receive(5000).ReplyStatusType=rsTimeOut
then ShowMessage('TIMEOUT');
if IdIcmpClient1.Receive(5000).ReplyStatusType=rsErrorUnreachable
then ShowMessage('UNREACHABLE');
if IdIcmpClient1.Receive(5000).ReplyStatusType=rsErrorTTLExceeded
then ShowMessage('ErrorTTLExceeded');
В результате возвращается ответ-rsTimeOut, хотя на этом же компьютере пример под Indy9 работает отлично, через коммандую строку windows пинг тоже проходи на ура. Помогите пожалуйста разобраться, в чем тут дело?