【发布时间】:2015-07-30 08:52:54
【问题描述】:
我正在使用 Delphi XE3 和 Indy 10(idTCPServer 和 idTCPClient)创建一个客户端-服务器应用程序。
服务器端将显示所有连接的客户端,我可以在列表中选择一些客户端并向它们发送命令或流/文件。为此,我按照 Remy Lebeau 先生的建议创建了一个消息队列。这是我正在做的事情:
我想知道的是:
对于我正在尝试做的事情,这是一个好方法吗?
当一侧开始读/写时,它期望另一侧写/读?如果对方做不到怎么办?假设 SERVER 请求一个文件,但它不存在,CLIENT 是否必须写一个“空”流以避免问题?
顺便说一句,我找不到任何好的例子(Indy 10 TCP 通信),使用队列、错误处理等。在 Indy 的网站上有很多断开的链接。你能给我推荐一个有很好例子的网站吗?
感谢您的帮助!
【问题讨论】:
-
不使用现有协议(例如 HTTP 或 WebSockets)的原因是什么
-
@mjn,我是这种编程的新手。经过一番研究,Indy 和 TCP 似乎是最好的工具和协议。顺便说一句,服务器和客户端在同一个局域网上......
-
OT:我仍然想知道为什么人们将字符串用于 TCP 远程命令。为什么不只是整数?他们害怕
Low(Integer)..High(Integer)的范围还是为什么会这样?我能想到的唯一原因是可读性,但这是你(或潜在的攻击者)不一定需要的。字符串在接收方更难处理,恕我直言,纯粹是浪费带宽。 [我说的是命令,而不是它们的参数] -
@TLama,字符串命令包括要发送的文件的路径等参数。但也许我对这个主题的了解不足以理解你的观点......
-
@TLama 事实上,当我第一次开始时,我创建了一个 TCP 客户端/服务器包装器(使用 ScktComp),其中包含预定义的命令列表(在 TCollection 中)。尽管每个可能的命令和参数都有一个唯一的名称,但实际的传输使用了一个唯一的 ID - 并在此之上进行了加密。