Hi@all
Meine Frage dreht sich im Folgendes:
Ich verschicke größere Dateien per IdTCPServer und IdTCPClient, wobei der Client eine Verbindung zum Server herstellt, die Datei in einen Stream läd und dann kleine Stücken des Streams in einer While Schleife verschickt.
Delphi-Quellcode:
With idTcpClient1 do
Socket.Connect
Socket.writeln(inttostr(Datenstream.size)); //unschön, muss noch verbessert werden
while (Datenstream.position<Datenstream.size) and KeineDateiMitHoehererPrioritaetVorhanden do
//Paket senden;
Disconnect;
end;
Es kann jetzt jedoch vorkommen, dass der Client vor dem Erreichen des Streamendes disconnecten muss (entweder z.B. wenn die Netzwerkverbindung getrennt wurde, oder eine Datei mit höherer Priorität gesendet werden soll). In diesem Fall soll der Server das Datenpaket speichern, damit später von den entsprechenden Stelle aus weitergesendet werden kann:
Delphi-Quellcode:
With AContext.Connection do
SizeOfIncomingFile:=strtoint(Socket.readln);
try
while (Datenstream.size<SizeOfIncomingFile) do
//empfangen
except
//Stream sichern für späteres fortsetzen
end;
if not disconnected then Disconnet;
end;
Leider bekomme ich andauernt Exceptions u.A. dem Fehler:
#10053 Software caused connection abort.
(Klar, weil ich ja einfach die Verbindung beende, aber wie kann ich den Server vorwarnen, dass gleich die Verbindung getrennt wird?)
Wenn jemand eine Idee hat, wäre ich sehr sehr dankbar!
Vlg, Alleinherrscher