繁体   English   中英

Indy10 TCP客户端发送回复发送程序

[英]Indy10 TCP client deliver reply to sending procedure

我正在使用Indy 10在Delphi 7中制作客户端程序。

它必须使用TIdTCPClient连接到服务器,并保持连接以发送和获取命令和回复,直到程序关闭。

服务器每个客户端只能维持一个常量连接以发送信息消息。 TIdTCPClient正在通过阅读线程进行监听。

题:
我正在从某个过程向服务器发送请求(使用WriteLn)以获取字符串列表,例如。 如何在不离开的情况下,以相同的程序获得该请求的答案(回复)? 喜欢使用TIdHTTP。

我看到2个解决方案:

  1. 从一个程序发出请求并在其他程序中处理它 - 代码和逻辑将更复杂。

  2. 对于过程中的每个请求,创建一个新的TIdTCPClient(Connect,WriteLn,ReadLn,Disconnect,Free)和处理请求。 但我不喜欢这种解决方案,因为它会导致很大的开销。

由于涉及阅读线程,它确实使事情变得复杂。 阅读线程需要是接收所有回复的线程,然后它可以根据需要将它们分发给处理程序。

如果您不介意分解代码,那么您的第一个解决方案很好。 这是最简单的解决方案,如果主线程是发出请求的解决方案,那么这是最好的解决方案。 你永远不应该阻止主线程。

如你所说,你的第二个解决方案不是很好。

另一种解决方案是为每个请求创建一个TEvent ,并将每个请求放入某个列表/队列中。 在收到响应时,让读取线程找到并发出相应的事件信号。 然后,发送过程可以等待事件,直到它被发出信号(例如, TThread.Synchronize()这种方式工作)。 如果过程在主线程中运行,请使用MsgWaitForMultipleObjects()进行等待,这样您仍然可以在等待时为主消息队列提供服务。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM