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

标签 delphi indy10

Delphi XE2,即 Indy 10。

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

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

有人可以给我指出几行代码作为示例吗?提前致谢。

最佳答案

嗯,这是最简单的演示。

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”风格的协议(protocol),这些协议(protocol)是基于 ANSI/ASCII 文本的。 RFC 风格的互联网协议(protocol)的回复通常通过网络编码为包含数字和字符串值的文本。如果您需要获取字符串列表的内容并将其作为响应返回,则可以使用 ASender.Response

对于客户端来说,question here suggests that TIdCmdTcpClient is not the most natural way to build the client for this server 。从他们的名字来看,你可能会认为他们是天生的一对,但事实并非如此。对于您可以构建的大多数简单的 TIdCMDTCPServer,您会发现普通的 TIdTCPClient 是启动客户端的最简单的构建 block 。

关于delphi - 求非常简单的TIdCommandHandler条件响应示例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10021073/

相关文章:

mysql - 我试图了解如何使用 TFDStoredProc(FireDac 组件)填充 TIWDBGrid(IntraWeb 组件)

multithreading - 可以强制释放Delphi threadvar内存吗?

delphi - 当客户端连接到 TIdTCPServer 时线程数增加

delphi - 使用 Indy Server 的多个绑定(bind)作为单独的套接字?

multithreading - Delphi 线程 - 代码的哪些部分需要保护/同步?

delphi - Delphi中的静态多态

delphi - 如何在 Delphi DataSnap REST 服务器上映射自定义 HTTP 方法前缀

delphi - 如何使用 Indy 将消息发送到存储在 TListView 组件中的多个电子邮件地址?

delphi - 将 TIDCookieManager 中的 Cookie 保存到文件中

delphi - 使用 Delphi-7 的 Indy10 无法下载某些 SSL 页面,即使使用 2019 年 5 月的 DLL