2

德尔福 XE2,所以印地 10。

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

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

有人可以以几行代码为例吗?提前致谢。

4

1 回答 1

2

好吧,这是最简单的演示。

在此处输入图像描述

在表单中添加一个 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 的想法是遵循基于 ANSI/ASCII 文本的“RFC”协议风格。RFC 风格的 Internet 协议的回复通常通过网络编码为具有数字和字符串值的文本。 ASender.Response如果您需要获取字符串列表的内容并将其作为响应返回,则可以使用它。

至于客户端,这里的一个问题表明 TIdCmdTcpClient 不是为此服务器构建客户端的最自然方式。从他们的名字来看,你会认为他们是为彼此而生的,但事实并非如此。对于您可以构建的大多数简单 TIdCMDTCPServer,您会发现普通香草TIdTCPClient是启动客户端的最简单的构建块。

于 2012-04-05T02:32:08.610 回答