寻求非常简单的TIdCommandHandler条件响应示例

时间:2012-04-05 00:18:04

标签: delphi indy10

Delphi XE2,所以Indy 10。

我的客户端发送一个命令,该命令由我的TIdCmdTCPServer的TIdCommandHandler处理。

我希望能够执行一些逻辑并返回成功或失败的响应,并在客户端检查它。

有人可以请几行代码指出我吗?提前谢谢。

1 个答案:

答案 0 :(得分:2)

嗯,这是最简单的演示。

enter image description here

在表单中添加一个IdCmdTCPServer,并添加一个命令,在Command属性中设置其名称,我原本以为我应该在OnCommand事件中处理响应,如下所示:

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

end;

更新 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 / Client的想法是遵循“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是启动客户端的最简单的构建块。