2012-08-14 88 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