在Delphi中发送和接收数据流

时间:2011-10-19 10:15:13

标签: delphi indy

我想创建一个连接到另一个软件的软件,并通过互联网将一些数据(基于文本)发送到另一个程序。

软件每300毫秒发送一次数据(使用定时器),接收器必须按时接收数据。

连接可以类似于以下

  1. 任何数据都可能丢失;
  2. 但其余部分必须尽可能以最小延迟准时到达(最长2秒);
  3. 延迟数据可视为丢失,可以忽略。
  4. 我认为它可能类似于视频会议软件,但只使用简单的文本作为数据。

    任何人都可以告诉我如何制作这样的节目,特别是

    • 我可以使用哪种组件(任何INDY示例);
    • 您推荐哪些技术。

    我计划用Delphi做这件事但其他建议也欢迎。

    ========================== update1 =================

    是否可以通过流发送图像

2 个答案:

答案 0 :(得分:3)

我建议使用UDP协议并为您的数据添加时间戳信息,并跟踪接收端的传入数据。您可以使用Indy或其他软件包中的UDP服务器(TIdUDPServer)和客户端(TIdUDPClient)组件。客户端组件用于发送数据和服务器以进行接收。

就我个人而言,我通常更喜欢Synapse -classes。它们比Indy低,因此更容易知道发生了什么,但另一方面,你可能需要自己实现Indy默认提供的东西。

<强>更新

实施非常简单:

发送数据:

在表单上删除TIdUDPClient。将“Host”设置为接收端的名称或IP地址(如果在同一台计算机上运行程序,则为“localhost”),并将端口设置为服务器正在侦听的高位数,例如54656。

将以下代码添加到按钮或计时器事件:

IdUDPClient1.Send('Hello, world!');

接收数据:

在表单上删除TIdUDPServer组件。将默认端口设置为与发送应用程序中相同的端口。添加OnUDPRead事件处理程序,代码为:

MessageDlg('Received: ' + StringOf(AData), mtInformation, [mbOk], 0);

每次收到新邮件时都会弹出新的邮件对话框。

更新2

UDP不适合图像,如果你想确保它们保持不受损坏,除非图像非常小并且适合一个数据包。

答案 1 :(得分:0)

除了Indy,我建议使用任何东西。它既有bug(特别是与Delphi捆绑的版本),也比其他组件集慢。它很容易理解并开始使用它,但是一旦你深入研究,你就会开始注意到小问题。 Indy一直处于开发阶段,您可以找到最新版本here。问题是,由于一些硬编码的依赖关系,你不能轻易地在2009年以后用Delphi版本中的新版本替换捆绑版本。

Delphi几乎没有集成其他网络通信方法,但我建议探索第三方组件。首先,如果你想要开源,你应该看看Overbyte ICS。它有点难以掌握,但它具有良好的性能和功能集。

作为一个非常好的商业解决方案,请查看IP^Works。我只是抓了它,但从我看到的,我可以全心全意地推荐它。