【发布时间】:2012-12-21 20:17:16
【问题描述】:
Indy TIdTCPServer 组件有一个 OnExecute 事件,您可以在其中处理传入数据。我的应用程序涉及在进入打印机之前处理的流数据,因此我依赖于准备好的输出设备。我想要做的是让 TCP 流控制在输出流繁忙的情况下管理输入流。
我不知道如何最好地处理这种情况。 Indy 文档对使用示例略知一二,感谢您提供任何指导!
【问题讨论】:
Indy TIdTCPServer 组件有一个 OnExecute 事件,您可以在其中处理传入数据。我的应用程序涉及在进入打印机之前处理的流数据,因此我依赖于准备好的输出设备。我想要做的是让 TCP 流控制在输出流繁忙的情况下管理输入流。
我不知道如何最好地处理这种情况。 Indy 文档对使用示例略知一二,感谢您提供任何指导!
【问题讨论】:
您无需手动处理 TCP/IP 流控制。如果设备还没有准备好,就不要在 OnExecute 代码中读取任何新的输入数据,这就是您所要做的。数据将位于套接字的接收缓冲区中,直到 Indy 将其读入自己的缓冲区,然后它将一直存放在那里,直到您在自己的代码中读取它为止。如果socket的接收缓冲区满了,TCP/IP会自动通知对方停止发送数据,直到缓冲区腾出一些空间。
【讨论】:
OnExecute 事件在连接的生命周期内连续循环触发,无论数据流如何。当事件退出时,它会立即再次被触发。根据需要等待数据是事件内部代码的责任。所有读取操作都转到 Indy 自己的InputBuffer。仅当 Indy 需要新数据来填充 InputBuffer 以满足读取时,它才会进入套接字接收缓冲区。
不确定您已经开发了自己的代码的等级。 如果您还是初学者,您可能会发现来自 http://sourceforge.net/projects/indy10clieservr/ 的演示示例很有帮助。
【讨论】: