【问题标题】:UDP file transferring in DelphiDelphi中的UDP文件传输
【发布时间】:2013-02-10 07:45:49
【问题描述】:

我正在编写一个通过局域网计算机传输文件的程序,我正在寻找Delphi中的文件传输方法已经有一段时间了。我发现 UDP 是一个很好的解决方案,但是有一个问题:在每个示例或文章中,我发现在服务器程序旁边有一个客户端程序,但是我的程序必须向/从网络中的每台计算机发送和接收,没有特定的服务器或客户端,例如p2p,我不想让一台计算机服务器和另一个客户端,我该怎么办?我也搜索了 Indy 文章,它也在服务器/客户端模式下工作(据我所知)。

【问题讨论】:

  • 这并不意味着你必须编程,只是你需要在你的程序中有两个组件,例如TIdUDPClient + TIdUDPServer。
  • 不过,您的问题尚不清楚 - 如果您想使用 UDP 发送文件,则必须在另一端等待接收它们。如果您只是想复制文件,则不需要 UDP 或其他任何东西;您可以在机器之间复制文件。你能准确解释一下你想要做什么吗?
  • @Ken,我想发送(正如你在每次发送中所说的那样,必须在另一端等待),问题也正是在这里,它并不总是“computer_A”发送和“ computer_B”接收,有时“B”发送,“A”接收,有时“C”发送,“B”接收,....所以我不能说“A”总是听而“B”总是发送,情况会改变。
  • 为什么要使用 UDP?您是否特别需要 UDP 提供的功能(例如广播功能)?对于某些应用程序,UDP 比 TCP 更好(例如:VoIP),因为它缺乏传输控制,并且应用程序可以处理网络延迟和抖动,但是对于文件传输,您需要传输控制协议.如果您通过 UDP 执行此操作,您肯定会自己重新实现整个 TCP!
  • @Cosmin,这是一个很好的提示,谢谢。不,UDP 没有特定的需求,在我的搜索中我发现它更容易处理。你有什么建议? TCP 与 Indy?它是否满足我的需求(我放置的图表图像是我正在寻找的)

标签: delphi delphi-xe3


【解决方案1】:

UDP 可以在广播 模式下工作,这正是你所需要的。但此类 UDP 广播无法在当前网络之外路由(即它们被路由器阻止),因此如果您的项目需要在主物理网络之外访问,则必须实现更复杂的东西。 p>

不要重新发明轮子!如果您想查看一些实现此概念的工作源,请参阅 Ares Galaxy

“Delphi自组织p2p网络项目具有高规模 能力和快速广播式搜索系统。客户支持 多源文件传输,部分文件共享,内置 音频/视频播放器和分散式聊天室”。

source code files are available from SourceForge。您可以根据需要重新使用/调整 P2P 网络层 - 但如果您在项目中使用它,请注意 Ares 源代码的许可条款。

【讨论】:

  • 当然,它确实可以在多播模式下通过 UDP 工作。但也不是,因为它能够构建 TCP/IP P2P 分布式网络。
【解决方案2】:

看看 Indy 的 TIdTrivialFTPTIdTrivialFTPServer 组件。 TFTP是基于UDP的文件传输协议。

【讨论】:

  • FTP 与多播无关。和 TFTP 都没有。 TFTP 只是一个非常简单的一对一协议,非常慢(等待任何数据包上的 ACK)并且意味着硬件资源不足。与OP问题无关。 TCP/IP 甚至 HTTP(作为 OCI 7 层)比 TFTP 更可靠,因为它们具有窗口化、数据包重发和许多其他可靠的传输方式。
  • @ArnaudBouchez:OP 的问题或 cmets 中没有任何内容让我认为实际上需要广播或多播。这是你假设的,OP 没有确认。 OP 实际描述的是实际工作的 P2P 数量。对等方决定谁是“客户端”,谁是“服务器”,并且可以在需要时交换角色,但每个单独的文件传输仍然是一个方向或另一个方向的客户端/服务器模型。 UDP 协议(​​如 TFTP)和 TCP 协议(​​如 FTP 和 HTTP)都可以正常工作。我并没有说 TFTP 是有效的,只是考虑到 OP 最初希望使用 UDP 是可能的。
  • @Remy,我是网络编程的新手,你能告诉我这些组件用法的示例链接吗?
  • 使用FTP进行进程间通信,而它是远程文件访问协议?很奇怪的选择,AFAIK。恕我直言,RESTful/HTTP 协议更有意义——甚至是带有专用应用层的普通 TCP/IP。如果你看一下 OP 图,对我来说听起来就像一个多播……每个节点都在向其他所有节点发送……当然,对于传输层来说,它总是点对点的。
  • @ArnaudBouchez:OP 描述的不是广播。他说“A发送给B”,“B发送给A”,“C发送给B”。他没有说“A发送给所有人”、“B发送给所有人”等等。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-12-26
  • 2015-03-06
  • 1970-01-01
  • 2010-10-22
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多