首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Delphi与Indy 10 - TCP通信的最佳方法

Delphi与Indy 10 - TCP通信的最佳方法
EN

Stack Overflow用户
提问于 2015-07-30 08:52:54
回答 1查看 1.5K关注 0票数 0

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

服务器端将显示所有连接的客户端,我可以选择列表中的一些客户端并发送命令或流/文件。为此,我创建了一个消息队列,由Remy先生支持。以下是我正在做的事情:

我想知道的是:

  1. 这是我想要做的事情的好方法吗?
  2. 当一方开始读/写时,它期望另一方写/读?如果对方不能呢?如果服务器请求一个文件,但它不存在,客户端必须编写一个“空”流来避免问题吗?

顺便说一下,我找不到这方面的任何好例子(Indy 10 TCP通讯),使用队列,错误处理等。在印第的网站上有很多坏链接。你能给我一个有好例子的网站吗?

谢谢你的帮助!

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-07-30 15:43:36

当一方开始读/写时,它期望另一方写/读?如果对方不能呢?如果服务器请求一个文件,但它不存在,客户端必须编写一个“空”流来避免问题吗?

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

代码语言:javascript
复制
Server: I will send a file
Client: OK
Server: FileStream
Client: OK

代码语言:javascript
复制
Server: Send me a file
Client: OK
Client: FileStream
Server: OK

代码语言:javascript
复制
Server: I will send a file
Client: Not Ready

代码语言:javascript
复制
Server: Send me a file
Client: Not Found

代码语言:javascript
复制
Server: Send me a file
Client: OK
Client: FileStream (error midway)
Server: FAILED

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

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/31719248

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档