Haj. Mam kawałek kodu sprawdzającego istnienie komputera w sieci lokalnej. O ile nie ma problemu z hostami, które są zarejestrowane w DNS, a nie odpowiadają na pinga, o tyle w przypadku braku komputera o danej nazwie, wyskakuje wyjątek z Pinga.Ping (TIdIcmpClient):
Socket error #11001 host not found
robi skok do Pinga.Free, debug F7 i znowu wskakuje do linii Pinga.Free, po czym funkcja UdzialDostpny wraca do TWatekPobor.Execute, gdzie wychodzi w pole..., w każdym razie nie przechodzi do następnej linii. Czy jest jakaś metoda, żeby zneutralizować działanie szkodliwego wyjątku?
(Delphi7)
function UdzialDostepny(Nazwa: string): Boolean;
var
strBufor: string;
NrZnak: Integer;
Pinga: TIdIcmpClient;
begin
Result := False;
try
Pinga := TIdIcmpClient.Create(Application);
Pinga.Host := Nazwa;
Pinga.Ping; //wyjątek przy nieistniejącym hoście
if (Pinga.ReplyStatus.BytesReceived > 0) then
Result := True;
finally
Pinga.Free;
end;
end;
procedure TWatekPobor.Execute;
begin
inherited;
while not Terminated do
begin
while (stlSciezkaPoczatkowa.Count > 0) and (not Spis.Przerwij) do
begin
// try
if UdzialDostepny(stlSciezkaPoczatkowa[0]) then //wezwanie "trefnej" funkcji
Spis.Pobierz(stlSciezkaPoczatkowa[0]);
// finally
stlSciezkaPoczatkowa.Delete(0);
// end;
end;
if Assigned(OnKoniecPoboru) then
OnKoniecPoboru(Self);
Suspend;
end;
end;