1

私はデモに従いました、そして物事はうまく働いています。私のクライアントには、サーバーにコマンドを送信して応答を処理する単一の機能があります。

最初のいくつかのコマンドではそれで問題ありませんでした。

  var result : String;
  TCPclient.SendCmd(theMessage);
  TCPclient.GetResponse(Result);

  if Result <> 'OK' then ....

サーバーが送信している場所

ASender.Reply.SetReply(200, 'OK');  ... or ...
ASender.Reply.SetReply(400, 'NAK');    

ここで、新しいコマンドを追加すると、結果はNAKまたはACK PLUSの値0、1、または2になります。

数値とテキストの2つのパラメータがあるように見える応答コードにぼんやりしています...。

「Ok0」、「OK1」、または「OK2」を恨んで送信することもできますが、それは非常に醜いです(おそらく悪いことです

私は成功のために200を使用し、テキストパラメータで0、1、または2を送信すると思います(または「OK」を使用して数値コードとして0、1、または2を送信するか、数値コードとして200、201、202を使用します)?

誰かが私がコーディングすべきものとその理由を理解するのを手伝ってくれませんか?(またはURLを指定してください)ありがとう

4

1 に答える 1

8

SendCmd()サーバーからの応答を読み取るため、サーバーが実際に2つの別々の応答を送信GetResponse()しない限り、後で呼び出さないでください。SendCmd()

通常、応答は次の形式を取ります。

<Response Code> <Optional Text>

応答コードが数字またはテキストキーワードのいずれかである場合。

サーバーが数値の応答コードを送信する場合は、次のように処理します。

サーバ:

// sends:
//
//  200 1
//
ASender.Reply.SetReply(200, '1');

クライアント:

if TCPclient.SendCmd(theMessage) = 200 then
  Value := StrToInt(TCPclient.LastCmdResult.Text.Text);

または:

// raises an exception if a non-200 response is received
TCPclient.SendCmd(theMessage, 200);
Value := StrToInt(TCPclient.LastCmdResult.Text.Text);

サーバーがテキスト応答コードを送信する場合は、次のように処理します。

サーバ:

// sends:
//
//  OK 1
//
ASender.Reply.SetReply('OK', '1');

クライアント:

if TCPclient.SendCmd(theMessage, '') = 'OK' then
  Value := StrToInt(TCPclient.LastCmdResult.Text.Text);

または:

// raises an exception if a non-OK response is received
TCPclient.SendCmd(theMessage, ['OK']);
Value := StrToInt(TCPclient.LastCmdResult.Text.Text);

応答のオプションのテキスト(存在する場合)は、TCPclient.LastCmdResult.Textプロパティでアクセスできます。これは、TStrings次の形式で複数行の応答を送信できるためです。

<Response Code>-<Optional Text>
<Response Code>-<Optional Text>
...
<Response Code> <Optional Text>

サーバ:

// sends:
//
//  200-The value is
//  200 1
//
ASender.Reply.SetReply(200, 'The value is');
ASender.Reply.Text.Add('1');

クライアント:

TCPclient.SendCmd(theMessage, 200);
Value := StrToInt(TCPclient.LastCmdResult.Text[1]);

このフォームの回答の後に、2番目の複数行のテキストを送信することもできます。

<Response Code> <Optional Text>
<Secondary Text>
.

サーバ:

// sends:
//
//  200 Data follows
//  Hello world
//  How are you?
//  .
//
ASender.Reply.SetReply(200, 'Data follows');
ASender.Reply.Response.Add('Hello world');
ASender.Reply.Response.Add('How are you?');

クライアント:

TCPclient.SendCmd(theMessage, 200);
TCPclient.IOHandler.Capture(SomeTStringsObj);
于 2012-04-27T04:59:45.103 に答える