1 确定初始路径和目标路径
2 调用StartTask(CString remoteurl,CString localfile);//检查服务器是否合法 是否支持断点续传,建立续传信息等
(1:调用ParseURL(remoteurl)//解析url,解析域名,分析端口号和服务器域名
(2:是否存在死体文件
(3:调用(SendRequest())检查是否能够连接到远端,是否支持断点续传,是否要重定向
[1调用send函数 发送
" GET /book/upload/200804301902386884.mp3 HTTP/1.1
Host: shetuan.pyzx.org
Accept: */*
Pragma: no-cache
Cache-Control: no-cache
Connection: close
Range: bytes= 100-
"}
[2调用Receive函数接受服务器的消息然后调用GetInfo()解析服务器的消息
{"HTTP/1.1 206 Partial Content
Content-Length: 6799226
Content-Type: audio/mpeg
Content-Range: bytes 100-6799325/6799326
Last-Modified: Wed, 30 Apr 2008 11:02:38 GMT
Accept-Ranges: bytes
ETag: "529d12b4b1aac81:4e7"
Server: Microsoft-IIS/6.0
X-Pow"
[3调用GetInfo(strHeader,dwContentLength,dwStatusCode,m_TimeLastModified)//解析头数据,获取文件信息和下载信息
([1解析HTTP应答的头信息的第一行得到 返回码 ==206 支持断点续传 如果是>=300 <400服务器 的应答是否为重定向
>=500// 服务器错误,可以重试 >=400 <500// 客户端错误,重试无用
([2获取ContentLength
([3获取Last-Modified:
(4 如果是第一次下载文件,把文件信息初始化 否则否则检查现在文件的请求和保存的文件是否一致(给据大小 ,时间和url地址)
3 调用CreateThread()创建线程 准本下载
[1 如果支持断点续传 创建四个线程 下载 如果不支持 创建一个下载 该函数设计两个回调函数
DownloadThread(用于下载文件)和Notify(用于监视下载线程的工作状态)
在DownloadThread里调用ThreadFunc开始下载
CSocket pSocket;
//首先针对每个线程创建一个阻塞的套接字来完成下载工作
pSocket.Create();
pSocket.Connect(m_strServer, m_nPort);
{"GET /book/upload/200804301902386884.mp3 HTTP/1.1
Host: shetuan.pyzx.org
Accept: */*
Pragma: no-cache
Cache-Control: no-cache
Connection: close
Range: bytes=0-1699831
"}
发送Send消息和接受Receive消息
调用GetHeadLength()获取信息头的长度将剩余部分写入文件
用while循环接受服务起发的文件
Notify(用于监视下载线程的工作状态)调用Finish等待线程的结束整理文件