首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Indy 10中的双向TCP通信?

Indy 10中的双向TCP通信?
EN

Stack Overflow用户
提问于 2012-01-08 11:17:26
回答 3查看 3.6K关注 0票数 1

我正在使用TIdCmdTCPClient和TIdCmdTCPServer。突然间,我发现我可能想要双向交流。

什么才是最好的?我应该使用其他组件吗?如果是的话,哪一个?或者我应该让‘客户’投票‘服务器’来询问它是否希望交流什么?

这是一个很小的系统。两个客户端和十个服务器,每天一次,每30到60秒一次,每次一次,因此轮询的开销是无关紧要的。

如果有“正确”的方法,我就会更努力。

更新:这真的是一个非常简单的系统。交通非常少,一切都很简单。所有传输都是一个指示,甚至键入一个可选的单个参数。

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

这可以在两个方向发送,在这里悬停并不是这样的“回复”。发个口信就好了(希望它能到那里)?接收没有数据的Ack?不捕获异常表示消息已成功发送?)

使用两个TIdCmdTCPServer是否可能(是否过分)?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-01-09 02:06:51

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

现在,这样做有一个问题--只要任何一个组件发送第一个命令,接收组件就会将它解释为一个命令并发送回一个答复,而另一个组件将其解释为一个命令,并返回一个回复,这将被解释为一个命令,并返回一个回复等等,从而导致一个无休止的回复循环。因此,将TIdCmdTCPClientTIdCmdTCPServer一起使用是不明智的。您应该在TIdCmdTCPServer中使用TIdTCPClient,或者在TIdTCPServer中使用TIdCmdTCPClient。取决于您的协议到底是什么样子,您可能不得不完全放弃使用TIdCmdTCPClientTIdCmdTCPServer,只需在TIdTCPServer中使用TIdTCPClient,这样您就可以更好地控制两端的读写。如果不首先知道通信协议应该是什么样子,就很难用实际的代码来回答。

票数 6
EN

Stack Overflow用户

发布于 2012-01-08 11:31:44

一个TCP套接字连接可以在两个方向上使用。服务器可以随时异步向客户端发送数据。但是,由客户端来读取套接字,对于异步处理,这是在侦听器线程中完成的,侦听器线程从套接字读取,并将传入的数据操作与主工作线程同步。

Indy组件中的一个示例用例是Telnet组件(TIdTelnet),它有一个接收线程侦听服务器消息。

但是,您还询问了“正确”的方式--然后,答案取决于其他因素,如网络稳定性、有保证的交付以及如何处理临时服务器中断。在企业环境中,在许多用例中首选一个中央消息中心,因此所有各方都只连接到这个中心服务器,该服务器只负责可靠的消息传递,并保存消息直到收件人可用为止。

票数 4
EN

Stack Overflow用户

发布于 2012-04-17 20:51:05

您可以下载INDY 10 TCP server示例代码这里

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8777041

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档