我正在使用tidcmdtcpclient和tidcmdtcpserver。突然我发现我可能喜欢双向交流。
最好是什么?我应该使用其他组件吗?如果是,是哪个?还是应该让“客户机”对“服务器”进行投票,询问它是否愿意交流什么?
这是一个非常小的系统。两个客户机和十个服务器,每30到60秒一次,每天一次,持续几分钟,因此轮询开销是无关紧要的。
如果有“正确”的方法,我会很高兴的。
更新:这真的是一个非常简单的系统。交通非常少,而且一切都很简单。所有的传输都是偶数类型的指示,一个可选的单一参数。
<event type> [ <parameter>]例如"HERE_IS_SOME_DATA 42"
这两个方向都可以发送,悬停在这里就没有“回复”了。只是发个短信(希望它能到那里)?接收没有数据的ACK?未捕获异常表示消息已成功发送?)
使用两个tidcmdtcpserver是否有可能(会过分了)?

最佳答案

在连接的生存期内,TIdCmdTCPClientTIdCmdTCPServer都会持续轮询其套接字终结点以获取入站数据。你不必为此做任何额外的事情。因此,一旦一个TIdCmdTCPClient连接到TIdCmdTCPServer上,两个组件最初都将处于读取状态,直到其中一个组件向另一个组件发送命令为止。
现在,这样做有一个问题-只要任何一个组件发送第一个命令,接收组件就会将其解释为一个命令并发送回一个回复,另一个组件会将其解释为一个命令并发送回一个回复,该回复将被解释为一个命令并发送回覆,等等,造成一个无休止的回覆循环。因此,将TIdCmdTCPClientTIdCmdTCPServer一起使用是不明智的。您应该将TIdTCPClientTIdCmdTCPServer一起使用,或者将TIdCmdTCPClientTIdTCPServer一起使用。根据协议的具体外观,您可能必须放弃使用TIdCmdTCPClientTIdCmdTCPServer两种语言,只需使用TIdTCPClientTIdTCPServer两种语言,这样您就可以更好地控制两端的读写。在不知道通信协议应该是什么样子的情况下,很难用实际的代码来回答问题。

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

10-11 19:53