Da hast du natürlich recht, der Anfang könnte theoretisch auch mal über 2 blöcke verteilt sein. Daran habe ich nicht gedacht. Das ist aber bis jetzt nie passiert, dennoch muss eine Möglichkeit her.
Hier mal der Code wie ich derzeit die Daten extrahiere:
Delphi-Quellcode:
Anfang := pos('%ANFANG',data);
Ende := pos('%ENDE',data);
// wenn keine daten im paket
if (anfang = 0) and (ende = 0) and (parts = false) then
exit;
// wenn im paket der Anfang aber kein ende
if (anfang <> 0) and (ende = 0) and (parts=false) then begin
dataparts := '';
allparts := '';
parts := true;
dataParts := copy(data,anfang,TCPDataLength);
end;
// wenn part angefangen wurde aber noch kein ende (also mitte)
if (anfang=0) and (ende=0) and (parts=true) then begin
dataParts := dataparts + copy(data,0,TCPDataLength);
end;
// wenn part angefangen wurde und nun das ende da ist
if (anfang=0) and (ende<>0) and (parts=true) then begin
dataParts := dataparts + copy(data,0,ende+6);
parts := false;
allparts := allparts + dataparts;
memo3.Lines.Add(allparts);
end;
Hinzu kommt, dass natürlich nicht ständig die gewünschten daten im Datenstrom enthalten sind. Daher fällt möglichkeit eins (mit dem großen Puffer weg).
Da muss es doch möglichkeiten geben