我正在使用Delphi XE3和Indy 10(idTCPServer和idTCPClient)创建客户端 - 服务器应用程序。
服务器端将显示所有连接的客户端,我可以在列表中选择一些客户端并发送命令或流/文件。为此,我创建了一个消息队列,由Remy Lebeau先生吮吸。这就是我在做的事情:
我想知道的是:
这是我尝试做的好方法吗?
当一方开始读/写时,它希望另一方写/读?如果对方不能怎么办? Supose SERVER请求一个文件,但它不存在,CLIENT必须写一个"空的"无论如何都要避免出现问题?
感谢您的帮助!
答案 0 :(得分:1)
当一方开始读/写时,它希望另一方写/读?如果对方不能怎么办? Supose 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()
阅读最终回复。