我按照演示,事情正常.我的客户端有一个功能,可以将命令发送到服务器并处理响应.
对于前几个命令来说这很好,我处理它
var result : String;
TCPclient.SendCmd(theMessage);
TCPclient.GetResponse(Result);
if Result <> 'OK' then ....
Run Code Online (Sandbox Code Playgroud)
服务器发送的位置
ASender.Reply.SetReply(200, 'OK'); ... or ...
ASender.Reply.SetReply(400, 'NAK');
Run Code Online (Sandbox Code Playgroud)
现在,我想添加一个新命令,结果将是NAK或ACK PLUS值0,1或2
我对响应代码感到朦胧,这些代码似乎有两个参数,一个是数字的,一个是文本的....
我可以只是kludge并发送'Ok0','OK1'或'OK2',但这非常难看(可能是一件坏事)
我想我虽然使用200成功并在文本参数中发送0,1或2(或使用'OK'并发送0,1或2作为数字代码,或使用200,201,202作为数字代码)?
有人可以帮我理解我应该编码的内容以及为什么?(或者只是指着我的URL)谢谢
SendCmd()为您读取服务器的响应,所以除非服务器实际发送两个单独的响应GetResponse(),SendCmd()否则请不要调用.
回复通常采取以下形式:
<Response Code> <Optional Text>
Run Code Online (Sandbox Code Playgroud)
响应代码是数字或文本关键字的位置.
如果服务器发送数字响应代码,请按如下方式处理:
服务器:
// sends:
//
// 200 1
//
ASender.Reply.SetReply(200, '1');
Run Code Online (Sandbox Code Playgroud)
客户:
if TCPclient.SendCmd(theMessage) = 200 then
Value := StrToInt(TCPclient.LastCmdResult.Text.Text);
Run Code Online (Sandbox Code Playgroud)
要么:
// raises an exception if a non-200 response is received
TCPclient.SendCmd(theMessage, 200);
Value := StrToInt(TCPclient.LastCmdResult.Text.Text);
Run Code Online (Sandbox Code Playgroud)
如果服务器发送文本响应代码,请按如下方式处理:
服务器:
// sends:
//
// OK 1
//
ASender.Reply.SetReply('OK', '1');
Run Code Online (Sandbox Code Playgroud)
客户:
if TCPclient.SendCmd(theMessage, '') = 'OK' then
Value := StrToInt(TCPclient.LastCmdResult.Text.Text);
Run Code Online (Sandbox Code Playgroud)
要么:
// raises an exception if a non-OK response is received
TCPclient.SendCmd(theMessage, ['OK']);
Value := StrToInt(TCPclient.LastCmdResult.Text.Text);
Run Code Online (Sandbox Code Playgroud)
可以在TCPclient.LastCmdResult.Text属性中访问响应的可选文本(如果存在),因为可以TStrings在以下格式中发送多行响应:
<Response Code>-<Optional Text>
<Response Code>-<Optional Text>
...
<Response Code> <Optional Text>
Run Code Online (Sandbox Code Playgroud)
服务器:
// sends:
//
// 200-The value is
// 200 1
//
ASender.Reply.SetReply(200, 'The value is');
ASender.Reply.Text.Add('1');
Run Code Online (Sandbox Code Playgroud)
客户:
TCPclient.SendCmd(theMessage, 200);
Value := StrToInt(TCPclient.LastCmdResult.Text[1]);
Run Code Online (Sandbox Code Playgroud)
您还可以在此表单中的回复后发送辅助多行文本:
<Response Code> <Optional Text>
<Secondary Text>
.
Run Code Online (Sandbox Code Playgroud)
服务器:
// 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?');
Run Code Online (Sandbox Code Playgroud)
客户:
TCPclient.SendCmd(theMessage, 200);
TCPclient.IOHandler.Capture(SomeTStringsObj);
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
2726 次 |
| 最近记录: |