IdIcmpClient a niestniejący host

0

Witam,
Jest to mój pierwszy post, wiem że nie jest to lubiane jeśli ktoś nowy przyłazi i pierwsze co robi to pyta.. niestety każdy zaczynał od zera..
Staram się napisać aplikację która będzie sprawdzać czy dany host jest widoczny w sieci LAN w danym momencie..
Program działa jednakże problem pojawia się w momencie próby odpytania hosta którego nie ma w sieci. Komponent wywala błąd socet'a próba zabezpieczenia przez wstawienie kontroli adresu (AReplyStatus.FromIpAddress = '0.0.0.0') nie zdjae egzaminu nie mam pomysłu jak wymusić żeby komponent omijał hosta którego nie ma..jeszcze jedno pierwszy raz mam problemem richedit jak kopiuje kolejne linie (hosty) to ucina mi pierwszy znak z każdej linii..

Szymek

0
  1. wstaw sprawdzanie w try except end
  2. kod
0

Ad. 1 - program zachowuje się jakby nie reagował na try
Ad. 2

Procedura testowania:

         procedure TForm2.IdIcmpClient1Reply(ASender: TComponent;
  const AReplyStatus: TReplyStatus);

var
  Time  : string;

  begin

  if (AReplyStatus.MsRoundTripTime = 0) then
    Time := '<1'
      else
    Time := '=';

if AReplyStatus.BytesReceived = 0 then
     begin
      RichEdit1.Lines.Add('host nie istnieje')  ;
           k:=w+1 ;
                      end;

  if (AReplyStatus.MsRoundTripTime > 1000) then

  begin
  RichEdit1.Lines.Add(IdIcmpClient1.Host + ' - adres nie odpowiada ');
  end;

  if (AReplyStatus.MsRoundTripTime < 1000) and (AReplyStatus.BytesReceived <> 0) then
  begin

    richedit1.Lines.Add(Format('Odpowiedź z hosta: ' + IdIcmpClient1.Host + ' ,IP: %s : bajtów=%d Czas%s%dms  TTL=%d ',
      [AReplyStatus.FromIpAddress,
      AReplyStatus.BytesReceived,
      Time,
      AReplyStatus.MsRoundTripTime,
      AReplyStatus.TimeToLive]))  ;
          label4.Caption := AReplyStatus.FromIpAddress;


end;
  end

 

Wywołanie testu:

procedure TForm2.Button2Click(Sender: TObject);
var
  TF : TextFile;
  j,t:integer;
           begin
         try
      begin

        begin
        w := richedit2.Lines.Count;

        for i:= 1 to strtoint(SpinEdit1.Text) do
          begin
          richedit1.Lines.Add('Rozpoczęcie testu ...');
             k:=   (w-1)   ;
        for t:=0 to k do begin

            IdIcmpClient1.Host:=richedit2.Lines.ValueFromIndex[t];
            label3.Caption := IdIcmpClient1.Host;
            IdIcmpClient1.Ping();
end;
end;
end;
end;


             richedit1.Lines.Add('Zakonczenie testu ...');

            finally
            end;
            end;

 
0

program zachowuje się jakby nie reagował na try

Ty masz try...finally MisiekD mówił o try...except.
poza tym źle ustawiłeś ten blok.

Poczytaj o wyjątkach, debuggerze i blokach try..except i try..finally.
I naucz się formatować kod.

1 użytkowników online, w tym zalogowanych: 0, gości: 1