Zrobiłem pętlę, w której IDTcpclient próbuje w kółko bezskutecznie łączyć się z czterema różnymi hostami. Celowo podaję mu cztery nieistniejące adresy, żeby ciągle ponawiał próby łączenia. Wklejam kod:
procedure TForm1.polacz;
begin
while not IDTcpclient1.Connected do begin
IdTCPclient1.Host:=addresslist[indeks];
try
Memo1.Lines.Add('Łączę z: ' + addresslist[indeks]);
IdTCPclient1.Connect;
except
if indeks<4 then inc(indeks) else indeks:=1;
end;
end;
end;
W Timerze zaś umieściłem linijkę, która sprawdza cyklicznie czy ów IDTcpclient jest połączony. Wklejam kod:
procedure TForm1.Timer1Timer(Sender: TObject);
begin
if IDTcpclient1.Connected then Memo2.Lines.Add('czarne') else Memo2.Lines.Add('białe') ;
end;
Dziwi mnie, że wyniki są różne. Większość razy funkcja zwraca "True", tak jakby był połączony. A czasem wypisuje mi, że nie jest połączony. Przecież teoretycznie nigdy nie jest skutecznie połączony. Skąd te różne wyniki?
Natomiast, gdy podam mu prawdziwy adres i IDTcpclient1 zestawi połączenie to funkcja już się uspokaja i zawsze zwraca "True".
W którym momencie można naprawdę ufać funkcji IDTcpclient1.connected ?
Może ktoś z szanownych forumowiczów mi to wytłumaczy, bo ja tego, kurna, nicht ferstehen.
Jest tak bez względu na to jak długi dam ConnectTimeout.