Einzelnen Beitrag anzeigen

Benutzerbild von jaenicke
jaenicke

Registriert seit: 10. Jun 2003
Ort: Berlin
9.946 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, 12: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