Nun, hier ist die einfachste Demo.

eine IdCmdTCPServer zu Ihrem Formular hinzufügen, und einen Befehl hinzufügen, stellen Sie seinen Namen in der Command
Eigenschaft, dachte ich, ich ursprünglich Antwort in OnCommand
Veranstaltung wie diese handhaben soll:
procedure TForm1.IdCmdTCPServer1CommandHandlers0Command(ASender: TIdCommand);
begin
//ASender.Response.Add('Hello'); // wrong way
ASender.Reply.SetReply(0,'HELLO');
end;
Update Remy wies darauf hin, dass ich Response nicht verwenden sollte.
Damit Sie Erfolg oder Misserfolg zurückgeben möchten, ist es üblich, ein numerisches Ergebnis gefolgt von dem Zeichenfolgenwert zu verwenden. Jeder String in der Antwort-Strings Liste wird an den Client einen impliziten End-of-line übertragen zurück:
procedure TForm1.IdCmdTCPServer1CommandHandlers0Command(ASender: TIdCommand);
begin
if DoSomething then
ASender.Reply.SetReply(0,'OK')
else
ASender.Reply.SetReply(999,'ERROR');
end;
Die Idee mit dem IdCommandHandler und einem CmdTCPServer/Client ist, dass Sie die "RFC" -Stil von Protokollen folgen, welche sind ANSI/ASCII textbasiert. Die Antwort eines RFC-ähnlichen Internetprotokolls wird typischerweise über den Draht als Text mit einem numerischen Wert und einem Zeichenfolgenwert codiert. ASender.Response
könnte verwendet werden, wenn Sie den Inhalt einer Zeichenfolgeliste benötigen und diesen als Antwort zurückgeben müssen.
Wie für den Client, ein question here suggests that TIdCmdTcpClient is not the most natural way to build the client for this server. Von ihren Namen hätten Sie gedacht, sie wären füreinander gemacht, aber es ist nicht genau. Für die meisten einfachen TIdCMDTCPServers, die Sie erstellen könnten, würden Sie feststellen, dass ein einfacher TIdTCPClient
der einfachste Baustein ist, mit dem Sie Ihren Client starten können.
'ASender.Response' ist die falsche Eigenschaft zu verwenden. Verwenden Sie stattdessen 'ASender.Reply', zB:' ASender.Reply.SetReply (123, 'FAILURE') '. 'Sender.Response' ist für den Versand von mehrzeiligen Texten gedacht, die den' ASender.Reply' ergänzen. Verwenden Sie dann auf der Clientseite die Methode 'TIdTCPClient.SendCmd()' und die Eigenschaft 'TIdTCPClient.LastCmdResult', um Befehle zu senden und die Antworten abzurufen. –
+1 zu beiden. Nur um 100% klar zu sein ... wenn ich ASender.Reply einstelle, dann überschreibt das die "normaleReaktion"? Und der Kunde sucht danach ... wie? Vielen Dank für die Hilfe, Leute ... – Mawg
Hoppla, tut mir leid, ich sehe nein, dass du das schon beantwortet hast. Danke .. und die Antwort – Mawg