65.9K
CodeProject 正在变化。 阅读更多。
Home

FTP 客户端和 HttpFileDownloader 组件 (控件)

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.81/5 (15投票s)

2008年6月25日

CPOL

3分钟阅读

viewsIcon

86293

downloadIcon

7020

FTP 客户端和 HttpFileDownloader 组件(控件)。

引言

我曾经需要一个简单、开源且健壮的 FTP 客户端来包含在我的项目中。 令我惊讶的是,尽管在包括 CodeProject 在内的各种网站上发布了许多 FTP 客户端,但我却找不到一个。 问题是质量:已发布的项目只是演示。 没有高质量的 FTP 客户端。

根据评分,最受欢迎的 CodeProject FTP 客户端可在此处获得:.NET 2.0 的 FTP 客户端库。 尽管进行了大量修复,但该组件并未按我预期的那样工作。 主要问题不在于修复(其中一些非常合理)——问题在于底层 FtpWebRequest 组件本身。

该组件旨在以无状态模式运行。 人们只能猜测做出如此“明智”决定背后的原因。 FTP 是一种基于连接的协议,任何将基于连接的协议融入到无连接组件中的尝试,从定义上来说,显然都无法很好地工作。 首先,放弃对连接状态的控制,我们能从中获得什么好处呢? 即使您将其隐藏在某处,连接也不会消失——这是协议的属性,而不是组件的属性。 我只能想到,该组件的设计者打算使该组件与 HttpWebRequest 保持一致。 但是,区别在于 HTTP 协议本质上是无状态的,而 FTP 不是。

FtpWebRequest 问题

那么,FtpWebRequest 有什么问题呢? 主要问题是响应时间。 连接到任何 FTP 客户端的服务器大约需要 2.5 秒。 FtpWebRequest 一致地显示 13.5 秒(连接到同一站点时)。 没有客户会在没有理由的情况下容忍额外的 11 秒延迟(增加 440%)。 除此之外,如果您不明确地将 KeepConnectionAlive 设置为 false,则系统将无法正常工作。 (默认情况下应该是false。)

解决方案

幸运的是,我在上述文章的 评论中找到了一个很好的解决方案。 该解决方案是 edtFTPnet。 这是一个最高质量的开源库(信不信由你)。 该库由 Enterprise Distributed Technologies 设计。 他们也有 FTP 组件的高级版本(带有 SSL 和其他功能),但它们不是免费的。 开源版本的唯一问题是它缺乏多线程支持。 但这不是真正的问题——如果您有经验,几乎可以为任何东西创建多线程包装器。 该组件是为 edtFTPnet 设计的多线程包装器,设计为 Windows Forms 控件,并添加了一些小的补充,例如状态栏支持和线程处理。

核心功能

  • 在单独的线程中运行。
  • 能够在任何时候取消传输。
  • 进度条支持。
  • 显示估计的剩余时间。
  • 显示传输速度。

如何使用控件

将根目录(和子目录)复制到任何位置。 在 Visual Studio 工具箱中创建一个新选项卡。 通过浏览 FTPLib,将库注册到 Visual Studio 工具箱。 您将能够在选项卡上看到控件。

将控件拖到您的窗体上。 将进度条放在窗体上。 选择您的 FtpControl 并在 ProgrBar 控件的属性中选择您的状态栏。

通过选择并双击 StatusUpdateEvent 来创建一个状态事件。

其余的从示例中可以很清楚地看出。

HttpFileDownloader

第二个组件是一个 HttpFileDownloader 组件(控件)。 两个组件都继承自 BaseDownloader 组件。

新版本

如果发布了较新版本,它将在此处提供。

© . All rights reserved.