Einzelnen Beitrag anzeigen

Benutzerbild von alleinherrscher
alleinherrscher

Registriert seit: 8. Jul 2004
Ort: Aachen
797 Beiträge
 
Delphi XE2 Professional
 
#1

IdTCPServer - Client verbindung richtig trennen

  Alt 17. Apr 2008, 12:14
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
„Software wird schneller langsamer als Hardware schneller wird. “ (Niklaus Wirth, 1995)

Mein Netzwerktool: Lan.FS
  Mit Zitat antworten Zitat