我正在构建一个具有一些远程桌面功能的系统。客户端被视为共享其桌面的每台计算机,服务器被视为具有数据库的中央服务器,该数据库接收所有多个桌面的图像。在客户端,我想构建两个项目:一个windows服务应用程序和一个VCL窗体应用程序。每个客户端应用程序可能在计算机上的不同用户帐户下运行,因此可能会有多个客户端应用程序同时运行,并且它们都将其图像发送到此客户端服务,该服务将它们中继到中央服务器。
该服务将负责连接到服务器、发送图像和接收鼠标/键盘事件。在后台运行的应用程序将以某种方式连接到该服务,并将屏幕截图传输到该服务中。目标是一个服务正在运行,而多个“客户端”能够连接到它并发送它们的桌面图像。此服务将连接到“中央服务器”,该服务器从不同的“客户端”接收所有这些不同的屏幕截图。然后,图像将被保存和记录,或者重定向到可能正在查看该“客户端”的任何“仪表板”。
问题是,我应该使用什么方法将客户端应用程序连接到客户端服务以发送图像?它们将在同一台计算机上运行。我需要这两个能力,发送简单的命令包以及流的图像块。我正要使用Indy组件(TIdTCPServer等)。但我相信肯定有一种更简单、更干净的方法来做这件事。我也在项目的其他地方使用Indy组件。
这是我想要的整个系统的示意图-我只是担心最右边和最左边的部分-在那里应用程序连接到同一台计算机内的服务。正如您所看到的,由于有许多层,我需要确保我使用的任何方法都足够强大,以适应大量图像数据的流式传输。

发布于 2012-02-15 10:35:32
进程之间的通信,你可以使用管道/邮件槽/套接字,我也认为在发送流文件时共享内存可能是最有效的方式
发布于 2012-02-15 18:00:04
我已经这样做过几次了,有很多不同的配置。对我来说,让它变得简单的关键是使用RemObjects SDK,它负责通信部分。有了控制其状态的线程,我就可以连接到可靠的服务器或服务,并且可以传输从一个状态字节到传输许多兆字节的任何数据(建议您对大型数据使用小块,以便对错误和流有更细粒度的控制)。我现在有了一组高可靠性的模板,我可以很容易地部署它们来制作新的变体,并且可以很容易地使用新的函数调用来更新它(我做的第一件事就是在客户端和服务器之间协商版本,以便它们知道它们可以支持什么)。因为这一切都是在高层次上工作的,所以我的代码只是进行“函数调用”,而从不担心线路上的格式是什么。同样,我可以从它们的二进制格式切换到标准SOAP或其他格式,而无需更改核心逻辑。最后,连接可以是本地的,可以连接到同一台机器(我将此用于与后台服务对话的最终用户应用程序),也可以连接到LAN或internet上的机器。都在相同的代码中。
https://stackoverflow.com/questions/9287073
复制相似问题