2012-04-05 5 views
2

デルファイXE2、インディ10は非常に単純なTIdCommandHandler条件応答の例を探している

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

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

例として、いくつかのコード行で指摘できますか?前もって感謝します。

答えて

2

これは最も簡単なデモです。

procedure TForm1.IdCmdTCPServer1CommandHandlers0Command(ASender: TIdCommand); 
begin 
    //ASender.Response.Add('Hello'); // wrong way 
    ASender.Reply.SetReply(0,'HELLO'); 

end; 

enter image description here

フォームにIdCmdTCPServerを追加し、1つのコマンドを追加し、Commandプロパティでその名前を設定し、私はもともと私はこのようなOnCommandイベントで応答を処理しなければならないと思いました更新 RemyはResponseを使用すべきではないと指摘しました。

成功または失敗を返したいので、数値結果の後に文字列値を使用するのが普通です。応答文字列のリストの各文字列は暗黙の行末をクライアントに送信しています

procedure TForm1.IdCmdTCPServer1CommandHandlers0Command(ASender: TIdCommand); 
begin 
    if DoSomething then 
    ASender.Reply.SetReply(0,'OK') 
    else 
    ASender.Reply.SetReply(999,'ERROR'); 

end; 

IdCommandHandlerとCmdTCPServer /クライアントとのアイデアは、あなたがプロトコルの「RFC」スタイルに従っていることですこれらはANSI/ASCIIテキストベースです。 RFC形式のインターネットプロトコルの応答は、通常、数値と文字列の両方の値を持つテキストとしてワイヤを介してエンコードされます。文字列リストの内容を取得してレスポンスとして返す必要がある場合は、ASender.Responseを使用できます。クライアントの場合、question here suggests that TIdCmdTcpClient is not the most natural way to build the client for this serverです。彼らの名前から、あなたはお互いのために作られたと思っていたでしょうが、それは正確ではありません。ビルドできる最も単純なTIdCMDTCPServersについては、プレーンバニラTIdTCPClientがクライアントを起動する最も単純なビルディングブロックであることがわかります。

+2

「ASender.Response」は間違ったプロパティです。代わりに 'ASender.Reply.SetReply(123、 'FAILURE')'のように、 'ASender.Reply'を代わりに使用してください。 'Sender.Response'は、' ASender.Reply'を補う複数行のテキストを送るためのものです。クライアント側では、 'TIdTCPClient.SendCmd()'メソッドと 'TIdTCPClient.LastCmdResult'プロパティを使用してコマンドを送信し、応答を取得します。 –

+0

+1に両方。ちょうど100%クリアするには...もし私がASenderを設定したら、それは "normalResponse"を上書きします。そして、クライアントはそれをチェック...どのように?おかげさまで、助けてくれてありがとうございます。 – Mawg

+0

おっと、申し訳ありませんが、あなたはすでにそれに答えました。ありがとう..と答え – Mawg

関連する問題