开发工具:VS 2008 .net Framework 3.5
系统环境:Microsoft Windows 2003
System.Net命名空间为当前网络使用的多种协议提供了简单的编程接口。WebRequest 和 WebResponse 类形成了所谓的可插接式协议的基础,可插接式协议是网络服务的一种实现,它使您能够开发使用 Internet 资源的应用程序,而不必考虑各种不同协议的具体细节。
l WebRequest类
WebRequest类发出对统一资源标识符(Uniform Resource Identifier,URI)的请求。它是一个 abstract 类。
WebRequest 是 .NET Framework 的请求/响应模型的 abstract 基类,用于访问 Internet 数据。使用该请求/响应模型的应用程序可以用协议不可知的方式从 Internet 请求数据,在这种方式下,应用程序处理 WebRequest 类的实例,而协议特定的子类则执行请求的具体细节。
请求从应用程序发送到某个特定的 URI,如服务器上的网页。URI 从一个为应用程序注册的 WebRequest 子代列表中确定要创建的适当子类。注册 WebRequest 子代通常是为了处理某个特定的协议(如 HTTP 或 FTP),但是也可以注册它以处理对特定服务器或服务器上路径的请求。
l WebResponse类
WebResponse类提供来自统一资源标识符(URI)的响应。它是一个 abstract 类。
WebResponse 类是 abstract 基类,协议特定的响应类从该抽象基类派生。应用程序可以使用 WebResponse 类的实例以协议不可知的方式参与请求和响应事务,WebResponse 派生的协议特定的类携带请求的详细信息。
客户端应用程序不直接创建 WebResponse 对象;而是调用 WebRequest 实例的 GetResponse 方法来创建。
l 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 的客户端验证身份,客户端证书必须安装在当前用户的“我的证书”存储区中。
l 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.aspx2) 另外,SetListBox 方法确保以线程安全方式访问 ListBox 控件。
参考:http://msdn.microsoft.com/zh-cn/library/ms171728(v=VS.90).aspx4,Form1.cs代码如下所示: