![]() |
Client sendet zu einem SERVER - Er empfängt nur die erste 11 Bytes wieso?
Liste der Anhänge anzeigen (Anzahl: 1)
Liebe Leute,
ich habe hier eine DEMO gemacht, doch der Server empfängt nur die erste 11 Bytes des BINARY STRINGs. WIESO? Das MEMO geht. Weiß wer Rat??:roll: Danke |
AW: Client sendet zu einem SERVER - Er empfängt nur die erste 11 Bytes wieso?
Ähm... du holst doch explizit nur 11 Bytes raus und das steht auch noch im Kommentar?
Delphi-Quellcode:
Auch der Anfang macht keinen Sinn:
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); 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. |
AW: Client sendet zu einem SERVER - Er empfängt nur die erste 11 Bytes wieso?
Lieber Sebastion,
BESTEN DANK für Deinen kompetenten RAT. Ich habe es danach überarbeitet und nun klappt es. :thumb: Hatte heute eine lange Nacht, dass ich das nicht mehr gesehen habe mit den 11 Bytes. Schönen GRUSS |
AW: Client sendet zu einem SERVER - Er empfängt nur die erste 11 Bytes wieso?
Liste der Anhänge anzeigen (Anzahl: 1)
Liebe Leute,
kann mir wer sagen, warum nach dem einmaligen erfolgreichen Senden und Empfang sich das aufhängt bis man STOP drückt um erneut zu Empfangen? :roll: ICh dachte der Socket bleibt offen und er empfängt dann laufend. DANKE |
AW: Client sendet zu einem SERVER - Er empfängt nur die erste 11 Bytes wieso?
Erstmal:
Du setzt FreeOnTerminate auf True. Dann darfst du dir diesen Thread nicht in eine Variable speichern und darauf zugreifen. Nie! Wenn du auf den Thread zugreifen möchtest, muss FreeOnTerminate False sein. Was passiert? Du rufst Terminate auf, woraufhin der Thread sich beendet und freigibt, dann rufst du WaitFor auf, aber der Thread existiert da schon nicht mehr. --> Rumms Warum hängt der Client? Im Debugger solltest du ja gesehen haben, dass der Client in Post hängen bleibt. Woran das liegt? Dein Server schickt keine Antwort. Also wartet der Client darauf. Du kannst z.B. im OnExecute einfach am Ende HTTP 200 schicken, sprich alles ok:
Delphi-Quellcode:
Wenn du mit HTTP arbeiten möchtest, wäre allerdings TIdHTTPServer statt TIdTCPServer sinnvoller, damit du das HTTP Protokoll nicht selbst schreiben musst...
AContext.Connection.IOHandler.WriteLn('HTTP/1.1 200 OK');
AContext.Connection.IOHandler.WriteLn('Content-Length: 2'); AContext.Connection.IOHandler.WriteLn(''); AContext.Connection.IOHandler.WriteLn('OK'); Dann geht das ganz einfach so:
Delphi-Quellcode:
Außerdem kannst du dir dann die Suche nach den beiden Leerzeilen usw. komplett schenken, weil du einfach die Anfrage direkt komplett bekommst.
// im OnCommandGet:
AResponseInfo.ContentText := 'OK'; AResponseInfo.ResponseNo := 200; |
AW: Client sendet zu einem SERVER - Er empfängt nur die erste 11 Bytes wieso?
SUPER :thumb: Perfekte Anwort, ich lerne dazu, recht herzlichen DANK.
|
AW: Client sendet zu einem SERVER - Er empfängt nur die erste 11 Bytes wieso?
Hat nun alles geklappt ! :thumb:
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 08:57 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz