有关多线程下载有关资料与总结

来源:互联网 发布:眼霜有用吗 知乎 编辑:程序博客网 时间:2024/03/29 14:19

 实例1 转自c# 多线程下载

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

 

HTTP协议,HTTP亦即Hpyer Text Transfer Protocal的缩写,它是现代互联网上最重要的一种网络协议,超文本传输协议

位于TCP/IP协议的应用层,是一个面向无连接、简单、快速的C/S结构的协议。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 既接收内容的长度。

 

总结的代码

 

主线程

 

重点还要学习多线程的处理。流文件的处理也是个很有意思的地方

 

这里不可避免的遇到了个问题,线程同步。如_threadCompleteNum++,因为是多个线程同时并发执行,在此句之后可能会造成有两个或两个以上线程认为_threadCompleteNum == _threadNum 条件(=5)都成立,例如第五个线程刚执行完_threadCompleteNum++,而第四个线程刚执行到条件判断,则造成两个条件都成立,而执行两次Complete()合并文件的方法。

还有例如主线程被调用多次,就是Btn多次单击生成多个主线程,解决此方法使用了Lock语句。

转自使用C# lock同时访问期间共享数据

主线程的LOCK在外部声明静态变量 

private static object run = new object();

再在主线程的第一句加lock (run)

这样不会造成多个主线程同时访问生成的暂时文件资源造成冲突。

原创粉丝点击