Zitat von
DracoBlue:
Genau so sehen meine Elemente ja aus, ich lese die Daten nun mit einem stream aus und schaue einfach was in den ersten 5 bytes drin steht und richte danach, welchen datentyp ich mit readbuffer auslese.
Du musst bei Ankunft der Daten erkennen, ob sie komplett sind. Falls nicht werden die
Daten in einem FIFO-Buffer zwischen gespeichert.
Hierzu etwas Code:
Delphi-Quellcode:
var
FIFOdaten : string; // globale Variable
...OnRead();
var
bytes : integer;
begin
FIFOdaten := FIFOdaten + socket.ReceiveData;
while Datenkomplett(FIFOdaten) do
begin
bytes := VerarbeiteDaten(FIFOdaten); // verarbeite 1 Paket
Delete(FIFOdaten, 1, bytes); // lösche die verarbeiteten Daten
end;
end;
Zitat von
DracoBlue:
Noch eine Frage zu
TCP/
IP, kann ich eigentlich sicher sein, dass alle daten in dem onreadevent da sind sobald dieses event ausgeführt wird?
Nö, die Daten können zerrissen werden und dann wird 2 Mal OnRead gefeuert.
Bei längeren Daten könnten die Empfangsdaten unvollständig sein. Deshalb wie oben im Beispiel gezeigt arbeiten.