Hallo,
Ich würde gerne für einen
Indy 10 TIDTcpClient "keep alive" pakete aktivieren.
Irgendwie bekomme ich das nicht hin. Der Client läuft auf Android. Der Server hat "keep alive" nicht aktiviert.
Muss ich den Client mit nem bestimmten Compiler schalter kompilieren?
Delphi-Quellcode:
try
If not TCPClient.Connected
then
Begin
TCPClient.Host := fHost;
TCPClient.Port := FPort;
TCPClient.ConnectTimeout := FTimeout;
TCPClient.ReadTimeout := FTimeout;
TCPClient.Socket.Binding.SetKeepAliveValues(true,5000,1000);
//Hier passiert der fehler
TCPClient.Connect;
Result := true;
if Assigned(TCPClient.IOHandler)
then
Begin
TCPClient.IOHandler.DefStringEncoding := IndyTextEncoding_ASCII;
TCPClient.IOHandler.MaxLineLength := 1024*1024*10;
End;
end
else
Begin
AlreadyConnected := '
Verbindung besteht bereits';
result := true;
exit;
end
except
on E:
Exception do
Begin
TCPClient.DisConnect;
TCPClient.Free;
TCPClient :=
nil;
TCPClient := TIdTCPClient.Create(self);
Result := false;
end;
end;
Folgender Fehler wird geworfen wenn in diesen code ausführe
Code:
Im Projekt TEST.exe ist eine
Exception der Klasse $C0000005 mit der Meldung '
access violation at 0x011bb59a: read of address 0x000000e0' aufgetreten.
Ohne keep alive geht es.
Muss ich keep alive an beiden enden aktivieren oder versteht der
INDY TCPserver , das der
INdy tcpClient gerne keep alive pakete hätte?
Wenn ich das ganze nach dem Connect ausführe scheint es auch keine Fehler zu machen, allerdings erhofe ich mir eigentlich das das "connect" früher merkt das da nichts ist.
Aus irgendeinem Grund wird der ConnectTimeout nicht wirklich berücksichtigt , dachte ein keep alive könnte da helfen...