如何使Indy 10 TIdTCPClient阻止呼叫?

时间:2012-08-14 13:55:04

标签: delphi indy10

我有一个非常简单的应用程序,有10个客户端和2台服务器。每个客户端每10秒向两个服务器发送一次心跳。它也可能每隔几分钟由外部事件触发,将另一个字符串发送到服务器上的TIdCmdTCPServer并等待响应。

我是网络新手。为了简单起见,我想进行阻塞调用(因为系统非常简单) - 客户端向服务器发送消息并阻塞,等待回复(或超时)。

我能这样做吗?或者我是否需要缓冲我的消息,并在发送下一个消息之前在客户端等待回复(或超时)?

Windows 7专业版,Indy 10,Delphi XE2

1 个答案:

答案 0 :(得分:2)

Indy专门使用阻塞I / O,所以你要求的是可行的,事实上它正是Indy在大多数情况下的工作方式。只需执行写操作并等待它返回,然后您就可以立即执行读操作。实际上,由于您已在服务器端使用TIdCmdTCPServer,因此可以在客户端使用TIdTCPClient.SendCmd()发送命令并在单个操作中等待其响应。

请注意,由于Indy阻塞,如果您不想阻止主线程,则应在工作线程中使用TIdTCPClient,这会在TIdTCPClient忙碌时使UI无响应。< / p>