Ähm... du holst doch explizit nur 11 Bytes raus und das steht auch noch im Kommentar?
Delphi-Quellcode:
SetLength(ReceivedData, 136);
try
AContext.Connection.IOHandler.ReadTimeout := 5000; // 5 seconds timeout
AContext.Connection.IOHandler.ReadBytes(ReceivedData, -1, True);
// Find the start of the body (after the double CRLF)
BodyStart := 0;
for i := 0 to Length(ReceivedData) - 4 do
begin
if (ReceivedData[i] = 13) and (ReceivedData[i+1] = 10) and
(ReceivedData[i+2] = 13) and (ReceivedData[i+3] = 10) then
begin
BodyStart := i + 4;
Break;
end;
end;
// Extract the body data (16 bytes, including "data=")
SetLength(BodyData, 16);
Move(ReceivedData[BodyStart], BodyData[1], 16);
// Extract the 11 bytes after "data=" directly as hex
HexData := '';
for i := BodyStart + 5 to BodyStart + 15 do
HexData := HexData + IntToHex(ReceivedData[i], 2);
Auch der Anfang macht keinen Sinn:
Du setzt die Länge des Puffers ReceivedData auf 136, woraufhin am Anfang 136 Nullen stehen, empfängst dann aber im Modus anhängen (der dritte Parameter von ReadBytes ist True). Deshalb bleiben diese 136 Nullen am Anfang und die Daten werden daran angehängt. Danach suchst du dann, wo der Start ist, sprich nach dem Nullen. Und dann nimmst du dort 16 Bytes inkl. data= und benutzt die folgenden 11 Bytes.
Außerdem prüfst du gar nicht, ob überhaupt genug Daten in ReceivedData drin stecken, bevor du daraus liest.
Was möchtest du denn eigentlich erreichen? Das ganze sieht unnötig kompliziert aus.