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.