AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Netzwerke Client sendet zu einem SERVER - Er empfängt nur die erste 11 Bytes wieso?
Thema durchsuchen
Ansicht
Themen-Optionen

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

Ein Thema von wschrabi · begonnen am 7. Mär 2025 · letzter Beitrag vom 10. Mär 2025
Antwort Antwort
wschrabi

Registriert seit: 16. Jan 2005
455 Beiträge
 
#1

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

  Alt 7. Mär 2025, 02:25
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??
Danke
Angehängte Dateien
Dateityp: zip Client_und_Server.zip (109,8 KB, 5x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

Registriert seit: 10. Jun 2003
Ort: Berlin
9.835 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
wschrabi

Registriert seit: 16. Jan 2005
455 Beiträge
 
#3

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

  Alt 7. Mär 2025, 09:32
Lieber Sebastion,
BESTEN DANK für Deinen kompetenten RAT. Ich habe es danach überarbeitet und nun klappt es.
Hatte heute eine lange Nacht, dass ich das nicht mehr gesehen habe mit den 11 Bytes.
Schönen GRUSS
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
455 Beiträge
 
#4

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

  Alt 7. Mär 2025, 11:56
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?

ICh dachte der Socket bleibt offen und er empfängt dann laufend.
DANKE
Angehängte Dateien
Dateityp: zip LIPOCLIENTuServer.zip (1,65 MB, 2x aufgerufen)
  Mit Zitat antworten Zitat
Benutzerbild von jaenicke
jaenicke
Online

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

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

  Alt 7. Mär 2025, 13:06
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:
    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');
Wenn du mit HTTP arbeiten möchtest, wäre allerdings TIdHTTPServer statt TIdTCPServer sinnvoller, damit du das HTTP Protokoll nicht selbst schreiben musst...
Dann geht das ganz einfach so:
Delphi-Quellcode:
// im OnCommandGet:
  AResponseInfo.ContentText := 'OK';
  AResponseInfo.ResponseNo := 200;
Außerdem kannst du dir dann die Suche nach den beiden Leerzeilen usw. komplett schenken, weil du einfach die Anfrage direkt komplett bekommst.
Sebastian Jänicke
AppCentral
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
455 Beiträge
 
#6

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

  Alt 7. Mär 2025, 13:47
SUPER Perfekte Anwort, ich lerne dazu, recht herzlichen DANK.
  Mit Zitat antworten Zitat
wschrabi

Registriert seit: 16. Jan 2005
455 Beiträge
 
#7

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

  Alt Heute, 09:23
Hat nun alles geklappt !
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:47 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 by Thomas Breitkreuz