C#网络编程

 第三篇来的好晚啊,上一篇说了如何向服务器推送信息,这一篇我们看看如何"快好准"的从服务器下拉信息。

    网络上有很多大资源文件,比如供人下载的zip包,电影(你懂的),那么我们如何快速的进行下载,大家第一反应肯定就是多线程下载,

那么这些东西是如何做的呢?首先我们可以从“QQ的中转站里面拉一个rar下来“。

然后用fiddler监视一下,我们会发现一个有趣的现象:

第一:7.62*1024*1024≈7990914  千真万确是此文件

第二:我明明是一个http链接,tmd的怎么变成n多个了?有意思。

好,我们继续往下看,看看这些链接都做了些什么?

最终,我们发现http协议中有一个Conent—Range字段,能够把我们的文件总大小进行切分,然后并行下载,最后再进行合并,大概我们知道

了什么原理,那么,我们强大的C#类库提供了AddRange来获取Http中资源的指定范围。

既然进行了切分,那么首先一定要知道文件的ContentLength是多少,如果对http协议比较熟悉的话,当发送一个头信息过去,服务器返回的

头信息中会包含很多东西,此时我们就知道要下载资源的大概情况,这个就有点“兵马未动,粮草先行“的感觉。

复制代码
 1             var request = (HttpWebRequest)HttpWebRequest.Create(url);
 2 
 3             request.Method = "Head";
 4 
 5             request.Timeout = 3000;
 6 
 7             var response = (HttpWebResponse)request.GetResponse();
 8 
 9             var code = response.StatusCode;
10 
11             if (code != HttpStatusCode.OK)
12             {
13                 Console.WriteLine("下载资源无效!");
14                 return;
15             }
16 
17             var total = response.ContentLength;
复制代码

这里有个决策,到底是以下载量来决定线程数,还是以线程数来决定下载量,由于我们的下载取决于当前的网速,所以在这种场合下更好的方案是

采用后者,这几天在闪存里面两次看到苍老师,肃然起敬,所以决定在不用线程和线程的情况下,看看下载仓老师的速度如何。

图片大小(217.27KB)

View Code

      在下面的图中可以看出,我们的资源被分成了n段,在217.27KB的情况下,多线程加速还不是很明显,我们可以试试更大的文件,这里我就

在本地放一个133M的rar文件。

        //请求文件
        public static string url = "http://localhost:56933/1.rar";

现在看一下效果是非常明显的。

C#网络编程

12篇学通C#网络编程——第三篇 HTTP应用编程(下)
摘要: 第三篇来的好晚啊,上一篇说了如何向服务器推送信息,这一篇我们看看如何"快好准"的从服务器下拉信息。 网络上有很多大资源文件,比如供人下载的zip包,电影(你懂的),那么我们如何快速的进行下载,大家第一反应肯定就是多线程下载,那么这些东西是如何做的呢?首先我们可以从“QQ的中转站里面拉一个rar下来“。然后用fiddler监视一下,我们会发现一个有趣的现象:第一:7.62*1024*1024≈7990914 千真万确是此文件第二:我明明是一个http链接,tmd的怎么变成n多个了?有意思。好,我们继续往下看,看看这些链接都做了些什么?最终,我们发现http协议中有一个Cone阅读全文

posted @ 2012-05-20 13:42 一线码农 阅读(703) | 评论 (3) 编辑

12篇学通C#网络编程——第二篇 HTTP应用编程(上)
摘要: 我们学习网络编程最熟悉的莫过于Http,好,我们就从Http入手,首先我们肯定要了解一下http的基本原理和作为,对http的工作原理有一定程度的掌握,对我们下面的学习都是有很大帮助的。一: 工作方式 ①:client和server建立可靠的TCP连接。 ②:然后client通过Socket向server发送http请求。 ③:server端处理请求,返回处理数据。 ④:在http1.0中,client与server之间的tcp连接立即断开。 但在http1.1中,因为默认支持“tcp的长连接”,所以server端采用超时才断开tcp连接的策略。二: 特点 ①:Http是...阅读全文

posted @ 2012-01-09 01:29 一线码农 阅读(3834) | 评论 (42) 编辑

12篇学通C#网络编程——第一篇 基础之进程线程
摘要: 在C#的网络编程中,进程和线程是必备的基础知识,同时也是一个重点,所以我们要好好的掌握一下。一:概念 首先我们要知道什么是”进程”,什么是“线程”,好,查一下baike。 进程:是一个具有一定独立功能的程序关于某个数据集合的一次活动。它是操作系统动态执行的基本单元, 在传统的操作系统中,进程既是基本的分配单元,也是基本的执行单元。 线程:是"进程"中某个单一顺序的控制流。关于这两个概念,大家稍微有个印象就行了,防止以后被面试官问到。二:进程 framework里面对“进程”的基本操作的封装还是蛮好的,能够满足我们实际开发中的基本应用。<1> 获取进程信息 fra阅读全文

posted @ 2012-01-03 02:44 一线码农 阅读(4393) | 评论 (32) 编辑

原文地址:https://www.cnblogs.com/Leo_wl/p/2510985.html