2012-08-14 90 views
0

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

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

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

的Windows 7专业版,印第10,德尔福XE2

回答

2

印地使用阻塞I/O专,所以你所要求的是可行的,实际上它是作品究竟是如何印在多数情况下。只需执行写入操作并等待它返回,那么您可以立即执行读取操作。实际上,由于您已经在服务器端使用TIdCmdTCPServer,因此您可以在客户端使用TIdTCPClient.SendCmd()发送命令并等待其在单个操作中的响应。

请注意,由于Indy处于阻塞状态,因此如果您不想阻塞主线程,则应在工作线程中使用TIdTCPClient,这会导致UI无响应,而TIdTCPClient处于繁忙状态。

+0

+1和答案。谢谢@Remy的确认。我将离开我的TIdTCPClient在主线程中,因为我希望它被阻塞直到收到答复。 – Mawg 2012-08-14 23:18:10