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 加上0、1 或 2

我对似乎有两个参数的响应代码很模糊,一个数字和一个文本....

可以拼凑并发送“Ok0”、“OK1”或“OK2”,但这非常难看(可能是坏事)

我想我想使用 200 表示成功并在文本参数中发送 0、1 或 2(或使用“OK”并发送 0、1 或 2 作为数字代码,或使用 200、201、202 作为数字代码)?

有人可以帮我理解我应该编码什么以及为什么吗?(或者只是指向我的 URL)谢谢

4

1 回答 1

8

SendCmd()为您从服务器读取响应,因此除非服务器实际发送两个单独的响应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]);

您还可以在此表单的响应之后发送辅助多行文本:

<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 回答