Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.836 Beiträge
 
Delphi 12 Athens
 
#2

AW: Client sendet zu einem SERVER - Er empfängt nur die erste 11 Bytes wieso?

  Alt 7. Mär 2025, 07:30
Ä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.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat