用C#实现HTTP协议下的多线程文件传输

本文介绍如何使用C#编程实现基于HTTP协议的多线程文件下载。通过HttpWebRequest和HttpWebResponse类,创建并管理多个线程,每个线程负责文件的一部分下载,最后合并成完整文件。示例代码展示了如何创建线程、设置请求范围以及处理文件流。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

开发工具:VS 2008 .net Framework 3.5

系统环境:Microsoft Windows 2003

 

System.Net命名空间为当前网络使用的多种协议提供了简单的编程接口。WebRequest WebResponse 类形成了所谓的可插接式协议的基础,可插接式协议是网络服务的一种实现,它使您能够开发使用 Internet 资源的应用程序,而不必考虑各种不同协议的具体细节。


WebRequest

WebRequest类发出对统一资源标识符(Uniform Resource IdentifierURI)的请求。它是一个 abstract 类。

WebRequest .NET Framework 的请求/响应模型的 abstract 基类,用于访问 Internet 数据。使用该请求/响应模型的应用程序可以用协议不可知的方式从 Internet 请求数据,在这种方式下,应用程序处理 WebRequest 类的实例,而协议特定的子类则执行请求的具体细节。

请求从应用程序发送到某个特定的 URI,如服务器上的网页。URI 从一个为应用程序注册的 WebRequest 子代列表中确定要创建的适当子类。注册 WebRequest 子代通常是为了处理某个特定的协议(如 HTTP FTP),但是也可以注册它以处理对特定服务器或服务器上路径的请求。

 

WebResponse

WebResponse类提供来自统一资源标识符(URI)的响应。它是一个 abstract 类。

WebResponse 类是 abstract 基类,协议特定的响应类从该抽象基类派生。应用程序可以使用 WebResponse 类的实例以协议不可知的方式参与请求和响应事务,WebResponse 派生的协议特定的类携带请求的详细信息。

客户端应用程序不直接创建 WebResponse 对象;而是调用 WebRequest 实例的 GetResponse 方法来创建。

 

HttpWebRequest

HttpWebRequest类提供 WebRequest 类的 HTTP 特定的实现。

HttpWebRequest 类对 WebRequest 中定义的属性和方法提供支持,也对用户直接与 HTTP 服务器交互的附加属性和方法提供支持。

不要使用 HttpWebRequest 构造函数。使用 WebRequest.Create 方法初始化新的 HttpWebRequest 对象。如果 URI 的方案是 http:// https://,则 Create 返回 HttpWebRequest 对象。

GetResponse 方法向 RequestUri 属性中指定的资源发出同步请求,并返回包含该响应的 HttpWebResponse。可以使用 BeginGetResponse EndGetResponse 方法对资源发出异步请求。

当要向资源发送数据时,GetRequestStream 方法返回用于发送数据的 Stream 对象。BeginGetRequestStream EndGetRequestStream 方法提供对发送数据流的异步访问。

对于使用 HttpWebRequest 的客户端验证身份,客户端证书必须安装在当前用户的“我的证书”存储区中。

 

HttpWebResponse

HttpWebResponse类提供 WebResponse 类的 HTTP 特定的实现。

此类包含对 WebResponse 类中的属性和方法的 HTTP 特定用法的支持。HttpWebResponse 类用于生成发送 HTTP 请求和接收 HTTP 响应的 HTTP 独立客户端应用程序。

说明:不要混淆 HttpWebResponse HttpResponse 类;后者用于 ASP.NET 应用程序,而且它的方法和属性是通过 ASP.NET 的内部 Response 对象公开的。

决不要直接创建 HttpWebResponse 类的实例。而应当使用通过调用 HttpWebRequest.GetResponse 所返回的实例。您必须调用 Stream.Close 方法或 HttpWebResponse.Close 方法来关闭响应并将连接释放出来供重用。不必同时调用 Stream.Close HttpWebResponse.Close,但这样做不会导致错误。

 

下面说明如何用 C#,利用HTTP协议编写一个支持多线程下载文件的程序。

程序设计:

1,  新建项目“HttpDownload”;

2,  Form1.Desginer.cs代码如下所示:

 

说明:

1)  添加四个 Lable 控件和 TextBox 控件;一个ListBox控件;一个Button控件;

2)  ListBox控件需要将private属性改为public,以便在外部使用。

3,  新建HttpFile.cs类,代码如下:

 

说明:

1)  该类使用了析构函数。通常,.NET Framework 垃圾回收器会隐式地管理对象的内存分配和释放。 但是,当应用程序封装窗口、文件和网络连接这类非托管资源时,应当使用析构函数释放这些资源。 当对象符合析构时,垃圾回收器将运行对象的 Finalize 方法

参考:http://msdn.microsoft.com/zh-cn/library/66x5fx1b.aspx

2)  另外,SetListBox 方法确保以线程安全方式访问 ListBox 控件。

参考:http://msdn.microsoft.com/zh-cn/library/ms171728(v=VS.90).aspx

4Form1.cs代码如下所示:

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值