Zitat:
Versuch mal ob das funktioniert:
Delphi-Quellcode:
procedure TForm1.TCPServerExecute(AThread: TIdPeerThread);
var s:
string;
begin
with AThread.Connection
do
try
s:=readln;
//Der Fehler ist bei diesem s:=readln
except
on e:
exception do
Showmessage(e.
Message);
//Hier den Fehler behandeln also in deinem Fall Socket-Fehler # 10054
end;
end;
Hmm, das einzige was jetzt kommt ist die Fehlermeldung, aber der Server stürzt trotzdem ab. Selbst wenn ich noch ein AThread.connection.disconnect; hinzufüge. Das einzige is jetzt, dass ich den Server weiter benutzen kann (die Oberfläche) sobald jedoch ein neuer Client verbinden will oder ein schon angemeldeter schreibt kommt wieder die Fehlermeldung.
Würd das aber gerne so haben, dass wenn der Fehler kommt diese Verbindung einfach geschlossen wird und der rest weiter arbeitet und sich nicht auf alle Verbindungen auswirkt.
Zitat von
Phistev:
Habe bisher noch nicht mit den Indys gearbeitet, aber es müsste doch eine Möglichkeit geben, mit der du feststellen kannst, ob der Client noch verbunden (Connected?) ist.
Naya, das war das, was ich als erstes versucht habe:
Delphi-Quellcode:
if Athread.Connection.Connected=true then
with AThread.Connection do
begin
s:=readln;
//...
end;
Funktioniert aber auch nicht und is glaub ich nen Denkfehler, da der Server ja eigentlich noch denkt, dass er ne Verbindung hat, er kann nur nicht readln Ausführen.