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);