知识大全 用C#实现HTTP协议下的多线程文件传输
Posted 属性
篇首语:山再高,往上攀,总能登顶;路再长,走下去,定能到达。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 用C#实现HTTP协议下的多线程文件传输相关的知识,希望对你有一定的参考价值。
用C#实现HTTP协议下的多线程文件传输 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
很多人都有过使用网络蚂蚁或网络快车软件下载互联网文件的经历 这些软件的使用可以大大加速互联网上文件的传输速度 减少文件传输的时间 这些软件为什么有如此大的魔力呢?其主要原因是这些软件都采用了多线程下载和断点续传技术 如果我们自己来编写一个类似这样的程序 也能够快速的在互联网上下载文件 那一定是非常愉快的事情 下面我就讲一讲如何利用C#语言编写一个支持多线程下载文件的程序 你会看到利用C#语言编写网络应程序是多么的容易 从中也能体会到C#语言中强大的网络功能
首先介绍一下HTTP协议 HTTP亦即Hpyer Text Transfer Protocal的缩写 它是现代互联网上最重要的一种网络协议 超文本传输协议位于TCP/IP协议的应用层 是一个面向无连接 简单 快速的C/S结构的协议 HTTP的工作过程大体上分连接 请求 响应和断开连接四个步骤 C#语言对HTTP协议提供了良好的支持 在 NET类库中提供了WebRequest和WebResponse类 这两个类都包含在System Net命名空间中 利用这两个类可以实现很多高级的网络功能 本文中多线程文件下载就是利用这两个类实现的 WebRequest和WebResponse都是抽象基类 因此在程序中不能直接作为对象使用 必须被继承 实际使用中 可根据URI参数中的URI前缀选用它们合适的子类 对于HTTP这类URI HttpWebRequest和HttpWebResponse类可以用于处理客户程序同WEB服务器之间的HTTP通讯
HttpWebRequest类实现了很多通过HTTP访问WEB服务器上文件的高级功能 HttpWebRequest类对WebRequest中定义的属性和方法提供支持 HttpWebRequest将发送到Internet资源的公共HTTP标头的值公开为属性 由方法或系统设置 常用的由属性或方法设置的HTTP标头为 接受 由Accept属性设置 连接 由Connection属性和KeepAlive属性设置 Content Length 由ContentLength属性设置 Content Type 由ContentType属性设置 范围 由AddRange方法设置 实际使用中是将标头信息正确设置后 传递到WEB服务器 WEB服务器根据要求作出回应
HttpWebResponse类继承自WebResponse类 专门处理从WEB服务器返回的HTTP响应 这个类实现了很多方法 具有很多属性 可以全面处理接收到的互联网信息 在HttpWebResponse类中 对于大多数通用的HTTP标头字段 都有独立的属性与其对应 程序员可以通过这些属性方便的访问位于HTTP接收报文标头字段中的信息 本例中用到的HttpWebResponse类属性为 ContentLength 既接收内容的长度
有了以上的了解后 下面看看这两个类的用法 要创建HttpWebRequest对象 不要直接使用HttpWebRequest的构造函数 而要使用WebRequest Create方法初始化一个HttpWebRequest实例 如
HttpWebRequest hwr=(HttpWebRequest)WebRequest Create(// /); 创建了这个对象后 就可以通过HttpWebRequest属性 设置很多HTTP标头字段的内容 如hwr AddRange( );设置接收对象的范围为 字节
HttpWebReques对象使用GetResponse()方法时 会返回一个HttpWebResponse对象 为提出HTTP返回报文信息 需要使用HttpWebResponse的GetResponseStream()方法 该方法返回一个Stream对象 可以读取HTTP返回的报文 如 首先定义一个Strean 对象 public System IO Stream ns; 然后 ns=hwr GetResponse () GetResponseStream ();即可创建Stream对象 有了以上的准备知识后下面开始设计我们的多线程互联网文件的下载程序 首先打开Visual Studio Net集成开发环境 选择 文件 新建 项目 然后选择 Visual C#项目 在向导右边列表框中选中 Windows应用程序 输入项目名称 如本例为 ftp 然后选择 确定 按钮 向导自动生成了一个Windows应用程序项目 首先打开窗口设计器设计应用程序窗口 增加如下控件
一个列表框 listBox 三个文本标签 label label 三个文本框 textBox textBox 一个开始接收按钮 button 设计好的窗口如下图
控件定义代码是
public System Windows Forms ListBox listBox ; private System Windows Forms Label label ; private System Windows Forms TextBox textBox private System Windows Forms Button button ; private System Windows Forms Label label ; private System Windows Forms TextBox textBox ; private System Windows Forms Label label ; private System Windows Forms TextBox textBox ; private System Windows Forms Label label ; private System Windows Forms TextBox textBox ; 打开Form 的代码编辑器 增加如下的命名空间
using System Net;//网络功能 using System IO;//流支持 using System Threading ;//线程支持 增加如下的程序变量
cha138/Article/program/net/201311/15726相关参考
.NET下的多线程编程应用程序域 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一应用程序域&n
Java实现基于http协议的网络文件下载 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! HTT
多线程下载由来已久如FlashGetNetAnts等工具它们都是依懒于HTTP协议的支持(Range字段指定请求内容范围)首先能读取出请求内容(即欲下载的文件)的大小划分出若干区块把区块分段分发给
现在我们也许能用一个线程解决在Counterjava中出现的问题采用的一个技巧便是在一个线程的run()方法中放置子任务——亦即位于go()内的循环一旦用户按下Start按钮线程就会启动但马上结束
用Socket类实现HTTP协议客户端应用 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! Htt
用Java多线程实现无阻塞读取远程文件 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 我是不怎么
/** *thisprogramTODO &nb
最近写了一个HTTP代理服务器发现访问网页时建立的连接很多消耗的线程也非常的多对于系统是一个不小的开销而且这些线程存在的时间都很短%以上的线程存在的时间
Java的多线程-实现多线程及线程的同步 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 一.实现
知识大全 用手机在360手机助手下的铃声在手机哪个文件夹里啊
用手机在360手机助手下的铃声在手机哪个文件夹里啊?在music文件夹下,只不过命名有改变~~360手机助手下载的APK在手机哪个文件夹里在“SD\\360Downloads\\Apk”文件夹中。AP