Nachdem das hier
https://www.delphipraxis.net/198916-...-moeglich.html so toll geklappt hat. Die nächste Frage:
In meinem verteilten Client/Server System möchte ich frühzeitig und schnell erkennen, ob ein Server eventuell nicht läuft. Dazu habe ich ihn früher einfach angepingt. Ab iOS und ab bestimmten Windowsversionen ist das nicht mehr ohne weiteres möglich, weshalb ich auf dieses kleine "Wunderwerk" kam, das bei der Gelegenheit auch den Service (über den Port) direkt prüft:
Delphi-Quellcode:
function TKommunikation.DoPing(
const AHostName:
string;
const APort: Word): Boolean;
var
tcp: TIdTCPClient;
begin
tcp := TIdTCPClient.Create;
try
tcp.Host := AHostName;
tcp.Port := APort;
tcp.ReadTimeout := 10;
// Should be unused by this particular method here
tcp.ConnectTimeout := fTimeout_ms;
try
tcp.Connect;
tcp.Disconnect;
Result := True;
// Success
except
on E:
Exception do
begin
Result := False;
end;
end;
finally
tcp.Free;
end;
end;
Schlüssel ist der wählbare Timeout, der relativ kurz gesetzt werden kann, da sich die Server im lokalen Netz befinden und schnell Verbindungen zulassen.
Meine Bestrebungen sind bekanntlich, die Indys zu eliminieren. Ich stieß auf
http://docwiki.embarcadero.com/Libra...tem.Net.Socket was ein Schritt in die richtige Richtung schien, aber mir fehlen die Möglichkeiten zum Setzen von TimeOuts. Ist das die richtige Komponente, oder was ist aus System.Net besser geeignet?
Sherlock