gpt4 book ai didi

delphi - Indy 10 中的双向 TCP 通信?

转载 作者:可可西里 更新时间:2023-11-01 02:44:16 24 4
gpt4 key购买 nike

我正在使用 TIdCmdTCPClient 和 TIdCmdTCPServer。突然发现我可能喜欢双向通信。

什么最好?我应该使用其他一些组件吗?如果是这样,哪个?或者我应该拼凑并让“客户端”轮询“服务器”以询问它是否希望传达任何信息?

这是一个非常小的系统。两个客户端和十个服务器,每 30 到 60 秒突发一个 tarnscation,每天一次持续几分钟,因此轮询的开销是无关紧要的。

我只是想知道是否有“正确”的方法。


更新:这确实是一个非常简单的系统。流量很少,一切都很简单。所有传输都指示偶数类型和可选的单个参数。

<event type> [ <parameter>]例如"HERE_IS_SOME_DATA 42"

这可以双向发送,悬停在这里不是“回复”。只是发出一条消息(并希望它到达那里)?收到没有数据的确认?没有捕获到异常说明消息发送成功?)

使用两个 TIdCmdTCPServer 是否可能(会不会太过分了)?

最佳答案

TIdCmdTCPClientTIdCmdTCPServer 在连接的生命周期内持续轮询它们的套接字端点以获取入站数据。您不必为此做任何额外的事情。因此,一旦 TIdCmdTCPClient 连接到 TIdCmdTCPServer,两个组件最初都将处于读取状态,直到其中一个组件向另一个组件发送命令。

现在,这样做有一个问题 - 只要任一组件发送第一个命令,接收组件就会将其解释为命令并发回回复,另一个组件将其解释为命令并发回回复,这将被解释为命令并发回回复,依此类推,导致来回无休止的回复循环。因此,一起使用 TIdCmdTCPClientTIdCmdTCPServer 是不明智的。您应该将 TIdTCPClientTIdCmdTCPServer 一起使用,或者将 TIdCmdTCPClientTIdTCPServer 一起使用。根据您的协议(protocol)到底是什么样子,您可能不得不放弃使用 TIdCmdTCPClientTIdCmdTCPServer 一起使用 TIdTCPClientTIdTCPServer 这样你就可以更好地控制两端的读写。在不知道通信协议(protocol)应该是什么样子的情况下,很难用实际代码来回答。

关于delphi - Indy 10 中的双向 TCP 通信?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8777041/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com