Delphi XE2、つまりIndy10。
クライアントは、TIdCmdTCPServerのTIdCommandHandlerによって処理されるコマンドを送信します。
いくつかのロジックを実行して、成功または失敗の応答を返し、クライアントでそれを確認できるようにしたいと思います。
誰かが例として数行のコードを教えてもらえますか?前もって感謝します。
さて、これが最も簡単なデモです。
IdCmdTCPServerをフォームに追加し、コマンドを1つ追加して、プロパティにその名前を設定します。元々、次のようなイベントCommand
でResponseを処理する必要があると考えていました。OnCommand
procedure TForm1.IdCmdTCPServer1CommandHandlers0Command(ASender: TIdCommand);
begin
//ASender.Response.Add('Hello'); // wrong way
ASender.Reply.SetReply(0,'HELLO');
end;
アップデートレミーは、私はレスポンスを使うべきではないと指摘しました。
したがって、成功または失敗を返したい場合は、数値の結果の後に文字列値を使用するのが伝統的です。応答文字列リストの各文字列には、クライアントに返送される暗黙の行末があります。
procedure TForm1.IdCmdTCPServer1CommandHandlers0Command(ASender: TIdCommand);
begin
if DoSomething then
ASender.Reply.SetReply(0,'OK')
else
ASender.Reply.SetReply(999,'ERROR');
end;
IdCommandHandlerとCmdTCPServer/Clientの考え方は、ANSI/ASCIIテキストベースの「RFC」スタイルのプロトコルに従うことです。RFCスタイルのインターネットプロトコルの応答は、通常、数値と文字列値の両方を含むテキストとしてネットワーク上でエンコードされます。 ASender.Response
文字列リストの内容を取得してそれを応答として返す必要がある場合に使用できます。
クライアントに関しては、ここでの質問は、TIdCmdTcpClientがこのサーバーのクライアントを構築するための最も自然な方法ではないことを示唆しています。彼らの名前から、あなたは彼らがお互いのために作られたと思ったでしょうが、それは正確ではありません。構築できる最も単純なTIdCMDTCPServerの場合、プレーンバニラTIdTCPClient
がクライアントを開始するための最も単純な構成要素であることがわかります。