本篇主要分享基于.Net实现一个客户端Http下载模块。
Http下载这块和服务器也有一定的联系,关于服务器Http下载模块的实现后面有时间再贴出来吧,主要是和客户端约定一下HttpPost参数的解析方式。
Http下载这块主要还是基于.Net库里面的HttpWebRequest类去实现的。
这里主要是封装了一些数据结构用于支持下载的显示,封装了多线程的处理避免Http请求造成线程的阻塞,封装了文件流的下载保存和md5校验。
一个分为两个部分:
HttpDownLoad-开启线程,创建下载任务,更新下载状态
HttpDownPack-Http下载任务的数据结构定义
HttpDownPack
public class HttpDownPack
{
// 网络错误重试次数
public int tryNum;
// 服务器http地址
public string url;
// post请求参数
public byte[] param;
// 下载后本地文件保存路径
public string localFile;
// 文件的md5
public string md5;
// 请求超时时间
public int timeOut = 5000;
// 下载状态
public HttpDownState state;
// 当前下载的大小
public int downSize;
}
public enum HttpDownState
{
Ready = 0,
DownLoading = 1,
Complete = 2,
Md5Failed = 3,
Error = 4
}
其中param是我们post请求需要构建的参数。
整体的设计师param的前四个字节构成一个int类型,其代表的是我们给服务器推送的协议号来表示我们需要做什么样的业务。
这里将