【发布时间】:2011-09-29 21:27:38
【问题描述】:
我需要创建一个 UDP 文件传输系统。我知道 TCP 是有保证的并且更可靠,但是我需要在不同位置之间传输大量文件,我认为这个项目的速度优势超过了使用 TCP 的好处。我刚刚开始这个项目,但如果有人以前做过这个,我希望得到一些指导。我将编写双方(客户端和服务器),因此我无需担心其他产品的功能限制。
简而言之,我需要:
- 获取大文件并分块发送
- 能够从客户端限制带宽
- 为错误创建某种数据包编号系统, 在服务器上按块重新传输和组装文件(是的,所有 我们从 TCP 免费获得的东西 :-)
- 可配置的数据报大小 - 我认为有些防火墙会抱怨,如果他们 太大了?
- 我可能遗漏的任何其他内容
我正在使用 UdpClient 开始这段旅程,并想用 C# 编写这个应用程序。任何智慧之言(除了使用 TCP)?
它取得了巨大的成功。我们曾经使用 RocketStream.com,但他们将产品卖给另一家公司仅供内部使用。我们的速度通常比 FTP 或原始 TCP 字节传输快 30 倍。
【问题讨论】:
-
使用 TCP :) “我认为这个项目的速度优势超过了使用 TCP 的好处。”什么?你真的希望获得比 TCP 更快的速度优势吗(为什么?)。
-
在短数据传输的情况下,UDP 通常比 TCP 性能更好,而不是长数据。
-
猜测一下,UDP 的速度优势恰恰是因为它本身并没有实现你说要实现的东西。
-
或者换句话说,文件越大,您就越关心可靠的传输。购买 TFTP 库。
-
我们现在实际上已经通过 Rocketstream.com 看到了这些速度,因此这不仅仅是营销。这个想法是不确认每个包装。从任意数量的数据包开始,然后检查以确保它们到达那里。如果是,则传输下一组数据包。如果没有或有任何错误,请重新传输并减少 ACK 之间的数据包数量。这个想法是在更好的网络上获得巨大的性能提升,在糟糕的网络上获得更少的收益。
标签: c# udp file-transfer