2

Delphi XE2、つまりIndy10。

クライアントは、TIdCmdTCPServerのTIdCommandHandlerによって処理されるコマンドを送信します。

いくつかのロジックを実行して、成功または失敗の応答を返し、クライアントでそれを確認できるようにしたいと思います。

誰かが例として数行のコードを教えてもらえますか?前もって感謝します。

4

1 に答える 1

2

さて、これが最も簡単なデモです。

ここに画像の説明を入力してください

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がクライアントを開始するための最も単純な構成要素であることがわかります。

于 2012-04-05T02:32:08.610 に答える