【问题标题】:What is the fastest way to send data over LAN?通过 LAN 发送数据的最快方法是什么?
【发布时间】:2014-03-16 10:15:06
【问题描述】:

现在我正在使用 Socket SendFile API,通过任何网络发送文件或它的一部分。我可以通过lan 加快这个过程吗?我知道像TeraCopy 这样的程序,与使用CopyFile API 的Windows 资源管理器处理相比(我认为),它使通过LAN 处理文件的速度更快(有人说速度提高了2 倍)。我不知道他们是怎么做到的。你能给我建议吗?

【问题讨论】:

  • 您会发现 TeraCopy 可能仍在使用 Win32 FileCopy 库。没有简单的方法来改进网络点对点,我相信 Windows/Samba 开发人员已经优化了他们的低级代码来很好地做到这一点。您可以期望的最好的结果是优化您的文件队列。
  • @Xenolightning 经过一番搜索后发现有很多更快的文件传输然后标准 TCP 用于不同的条件:对于很多小文件 - 首先,对于具有高延迟的高速网络上的大文件- 第二,对于大文件,赢得具有低延迟的高速网络 - 第三……仍在寻找……
  • 你有两个问题,“我可以让这个过程在局域网上更快吗?”显而易见的答案是Yes。然后您询问 TeraCopy 的工作原理,这是我用作您的“真实”问题的上下文的内容。也许您将问题修改为“我想通过网络传输文件,如何才能最大限度地提高传输速度?”

标签: c# c++ sockets networking tcp


【解决方案1】:

您可以即时压缩数据,然后在通过网络发送后解压缩。

GZipStream 非常适合这种事情,并且提供了基本的压缩/解压缩示例。

压缩当然会降低 CPU 性能,但您必须传输更少的数据,从而缩短传输时间。这个库的好处是压缩适用于流。因此,您可以通过网络进行流式传输,而无需等待整个文件压缩。

【讨论】:

  • 除非您在目的地运行另一个守护程序来解压缩流,否则这将不起作用。否则,您最终必须在调用CopyFile API 之前解压缩流。或者最坏的情况,将压缩文件写入目的地,然后必须读取和写入以解压缩。
  • 你是对的,但问题不是很精确,应该如何进行转移。所以我做了假设。
【解决方案2】:

加快文件复制的一种方法是通过 UDP 而不是 TCP。那么问题就在于实现错误检查(因为 UDP 不保证数据包完整或按顺序到达)。

Windows 资源管理器文件复制很慢,因为它单独打开每个文件,复制它,然后关闭它(至少据我所知)。

您的问题并没有真正给出任何代码,因此“正确”回答有点困难。

【讨论】:

  • UDP 是一种糟糕的文件复制方式,开销将远远超过在握手等方面的任何感知节省。文件是二进制数据的顺序流,正是 TCP 的设计目的。
  • @Ashigore:对于写入文件,数据包到达的顺序无关紧要,因此如果数据包无序到达,则可以节省接收端的排队。我确实同意成本可能超过收益。
  • 在这里我发现en.wikipedia.org/wiki/UDP-based_Data_Transfer_Protocol 它基于UDP,就像其他一些针对高速广域网上的大文件传输优化的协议一样,在这方面比TCP 更有效。但是在一些通用应用程序中自己在 udp 上编写这样的协议是个坏主意……工作量太大。
猜你喜欢
  • 1970-01-01
  • 2015-02-27
  • 1970-01-01
  • 1970-01-01
  • 2014-01-12
  • 2020-06-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多