我正在使用TIdCmdTCPClient和TIdCmdTCPServer.突然间,我发现我可能想要进行双向沟通.
什么是最好的?我应该使用其他一些组件吗?如果是这样,哪个?或者我应该使用'客户'轮询'服务器'来询问它是否希望进行任何通信?
这是一个非常小的系统.两个客户端和十个服务器,每天30到60秒发生一次喷射,每天一次几分钟,因此轮询的开销是无关紧要的.
如果有一个'正确'的方式,我只是喜欢.
更新:这真的是一个非常简单的系统.交通非常少,而且一切都很简单.所有传输都是偶数类型的指示,是可选的单个参数.
<event type> [ <parameter>] 例如 "HERE_IS_SOME_DATA 42"
这可以在两个方向发送,悬停在这里不是"回复"本身.只是发消息(并希望它到达那里)?收到没有数据的Ack?不捕获异常表示消息已成功发送?)
使用两个TIdCmdTCPServer是否可能(是否有点矫枉过正?)
无论TIdCmdTCPClient和TIdCmdTCPServer连接的生命周期内连续轮询入站数据的套接字端点.你不必为此做额外的事情.因此,一旦TIdCmdTCPClient连接到TIdCmdTCPServer,两个组件最初将处于读取状态,直到其中一个组件向另一个发送命令.
现在,这样做有一个问题 - 只要任一组件发送第一个命令,接收组件就会将其解释为命令并发回一个回复,另一个组件将其解释为命令并发回回复,这将被解释为一个命令并发回一个回复,等等,导致无休止的回复循环.出于这个原因,使用TIdCmdTCPClient和TIdCmdTCPServer一起是不明智的.您应该使用TIdTCPClient与TIdCmdTCPServer,或使用TIdCmdTCPClient有TIdTCPServer.根据您的协议的具体情况,您可能不得不放弃使用TIdCmdTCPClient和TIdCmdTCPServer完全使用TIdTCPClient,TIdTCPServer因此您可以更好地控制两端的读写.在没有首先知道通信协议应该是什么样的情况下,很难用实际代码回答.
| 归档时间: |
|
| 查看次数: |
3414 次 |
| 最近记录: |