我需要实现两个相互交换数据的应用程序。这两个应用程序将在属于 LAN 的不同 PC 上运行。

我们如何在 Delphi 中做到这一点?

是否有任何免费组件可以让跨 PC 的应用程序之间轻松交换数据?

有帮助吗?

解决方案

如果我在写我自己,我(几乎)总是使用套接字的应用程序之间交换数据。

它的重量轻,它的工作原理以及在同一台机器上,通过本地网络或在不改变互联网,它可以让你的应用程序之间传送与不同的权限,如服务(Windows消息这里会出现问题)。

这可能不适合你的要求,但我也独立于平台的传输的粉丝,如TCP / IP。

有很多的德尔福自由选择。这里有一些我所知道的。如果你喜欢堵库,看看或的突触。如果你喜欢无阻塞,请 ICS

其他提示

在你选择的技术中,用户需要根据其吞吐量,粒度,延迟和临界表征通信。

吞吐量 - 如何每单位时间的数据量将需要移动?可能的值的范围极广,最低速率和最高速率应用的共同点几乎没有。

粒度 - 有多大的消息?多少数据并接收应用程序需要,才可以使用该消息?

延迟 - 当一个aplication发送消息时,多快必须在其他应用看到吗?你想接收的应用程序发送应用程序的反应速度如何呢?

临界 - 多久可以将接收到的消息被无人看管前它由以后消息溢出? (这通常并不重要,除非吞吐量高,消息存储是有限的。)

一旦你已经回答了这些问题,就可以开始问关于你的具体情况最好的技术。

-Al。

我曾经使用邮筒,如果我需要在通过网络在时间(“广播”)与一个以上的PC进行通信,虽然有需要提醒的是邮筒没有保障。

有关1对1,命名管道是做这样的事情的一个Windows方式,则基本上打开的通信信道2 PC之间,然后将消息写入到管道。不直截了当地开始,但非常可靠的东西,如Windows服务的推荐方式。

MS提供命名管道作为与SQL服务器(除TCP / IP以外)进行通信的另一种方法。

但正如布鲁斯说,TCP / IP是标准的,独立于平台,并且非常可靠的。

DCOM 曾经是一种很好的进程间通信方法。这也是德尔菲的强项之一。今天我会 强烈地 建议不要使用它。

根据您项目的性质,我会选择

  • 使用 SQL 服务器
  • 套接字通信

查看使用“远程过程调用”类型接口的解决方案。我用 RemObjects SDK 对于这类事情,但是有开源版本 真正的瘦客户端 这样也可以。

这两种方法都允许您创建一个对于大多数代码来说都是“透明”的连接,您只需调用一个接口即可通过线路发送数据并获取结果。然后,您可以按照平常的方式进行编程,而忘记套接字等详细信息。

这是的那些情况下,其中一个是不是真的有一个“最好的”回答,因为几乎任何已经讨论可用于两个应用程序之间通信的准确的技术。该方法的选择使用才会真正降下来与您的沟通的关键性质,以及有多少数据必须从一个工作站转移到另一个地方。

如果您的沟通不是时间敏感的或关键的,那么数据库或文件的定期的简单调查可能就足够了。如果你的沟通是非常关键的时间敏感的然后将在每个客户端TCPIP服务器可能是值得追求的。如果只是对时间敏感然后邮筒也是一个不错的选择,如果重要,但不是时间敏感然后命名管道。

我使用了库的组播组分(IdIPMCastClient /服务器),用于这种类型的事情很多次。这些应用只是发送XML对方。快速和容易以最小的连接要求。

也许最简单的方法是,读出和写入文件(或可能每一个方向文件)。它还具有的优点是很容易模仿和跟踪。这不是最快的选项,虽然(它肯定听起来很蹩脚的;-))。

一个可能性是在网络上“共享”的对象。

有可能的客户机 - 服务器ORM像我们的小mORMot

此程序源码libraires从Delphi 6的工作到XE2,并使用JSON用于传输。还有包括一些安全功能(涉及的RESTful认证机构),并且可以使用任何数据库 - 或没有数据库在所有

特别参见href="http://synopse.info/fossil/dir?name=SQLite3/Samples" rel="nofollow">第一四个样品提供中

对于 Delphi 应用程序集成, 面向消息的中间件 可能是一个选择。消息代理提供有保证的交付、负载平衡、不同的通信模型,并且它们可以跨平台和跨语言工作。开源消息消息代理包括:

(免责声明 - 我是这些服务器的 Delphi / Free Pascal 客户端库的作者)

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top