Chinaunix首页 | 论坛 | 博客
  • 博客访问: 17670576
  • 博文数量: 7460
  • 博客积分: 10434
  • 博客等级: 上将
  • 技术积分: 78178
  • 用 户 组: 普通用户
  • 注册时间: 2008-03-02 22:54
文章分类

全部博文(7460)

文章存档

2011年(1)

2009年(669)

2008年(6790)

分类: C/C++

2008-05-27 10:56:57

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等待线程的结束整理文件
阅读(346) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~