繁体   English   中英

带Indy 10的Delphi-TCP通讯的最佳方法

[英]Delphi with Indy 10 - Best approach for TCP communication

我正在使用Delphi XE3和Indy 10(idTCPServer和idTCPClient)创建客户端-服务器应用程序。

服务器端将显示所有已连接的客户端,我可以在列表中选择一些客户端,然后向其发送命令或流/文件。 为此,我创建了一个消息队列,由Remy Lebeau先生提出。 这是我在做什么:

在此处输入图片说明

我想知道的是:

  1. 这是我尝试做的一个好方法吗?

  2. 当一侧开始读取/写入时,它期望另一侧进行写入/读取吗? 如果另一边不能怎么办? 假设SERVER请求一个文件,但该文件不存在,那么CLIENT是否必须编写一个“空”流来避免出现问题?

顺便说一句,在队列,错误处理等方面,我找不到任何很好的示例(Indy 10 TCP通信)。在Indy的网站上,有很多断开的链接。 你能给我一个很好的例子的网站吗?

谢谢你的帮助!

当一侧开始读取/写入时,它期望另一侧进行写入/读取吗? 如果另一边不能怎么办? 假设SERVER请求一个文件,但该文件不存在,那么CLIENT是否必须编写一个“空”流来避免出现问题?

让客户端发送一个答复,接受/拒绝该请求,然后再传输文件。 还要使接收方在传输完成后发送回复,以便发送方在接收方知道是否接收到整个文件。

Server: I will send a file
Client: OK
Server: FileStream
Client: OK

Server: Send me a file
Client: OK
Client: FileStream
Server: OK

Server: I will send a file
Client: Not Ready

Server: Send me a file
Client: Not Found

Server: Send me a file
Client: OK
Client: FileStream (error midway)
Server: FAILED

话虽如此,由于服务器是向客户端发送命令的服务器,因此请考虑在客户端使用TIdCmdTCPClient而不是TIdTCPClient 这将为您提供一个专用线程来接收服务器命令,并且您可以为命令创建OnCommand处理程序,并使用提供的TIdCommand对象发送答复。

考虑使用TIdTCPConnection.SendCmd()方法发送命令并读取其初始响应,并使用TIdTCPConnection.GetResponse()读取最终响应。

暂无
暂无

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

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