Einzelnen Beitrag anzeigen

shmia

Registriert seit: 2. Mär 2004
5.508 Beiträge
 
Delphi 5 Professional
 
#4

Re: IDTelnet: Warten bis die Übertragung zu Ende ist (Ereign

  Alt 14. Aug 2007, 18:38
Zitat von Burki:
Muß dazu sagen, daß das DataAvailable öfters durchlaufen wird (warum auch immer, wahrscheinlich kleinere Datenpakete), deswegen kann ich nicht sagen, daß wenn das Event "DataAvailable" fertig ist, auch alle Daten bei mir angekommen sind.
Richtig, Datenpakete treffen einzeln ein und jedesmal wird das Event "DataAvailable" gefeuert.
Aber auch das Ende eines "logischen" Datenpakets wird im Protokoll geregelt.
Wenn im Datenstrom ein CR LF eintrifft, dann sind die Daten vollständig und du kannst die zusammengesetzte Einzelpakete verarbeiten. So ist das z.B. beim SMTP oder POP3 geregelt.
Bei binären Daten muss man vor den eigentlichen Nutzdaten die Länge der folgenden Daten mitteilen.

Delphi-Quellcode:
// Beispiel
var
   receivedata : string;
procedure Txxxx.DataAvailable(...);
var
   p : integer;
begin
  // Daten anhängen
  receivedata := receivedata + socket.ReadString();
  // prüfen ob schon fertig
  p := Pos(#13#10, receivedata);
  if p > 0 then
  begin
     Verabeite(Copy(receivedata, 1, p-1));
     // verarbeite Daten löschen, der Rest könnte schon der Anfang des nächsten Datenpakets sein
     Delete(receivedata, 1, p+1); // ob hier jetzt +1 oder +2 stehen muss, bitte selber ausprobieren
  end;
end;
Andreas
  Mit Zitat antworten Zitat