共 1,393 篇文章
共 6,621 篇文章及评论
博客分类
Blog Roll
- Association for Computing Machinery TechNews (ACM)
- Go Parallel! (Dr. Dobbs)
- HPCwire (Tabor Communications, Inc.)
- insideHPC (John West)
- Joe Duffy's Weblog (Microsoft)
- Microsoft Parallel Programming Development Center (Microsoft Germany)
- MultiCoreInfo.com
- scalability.org (Scalable Informatics)
- Software Dev Blog (Intel Germany)
- Soft Talk Blog (Intel United Kingdom)
- The Moth (Microsoft)
Archives
帖子来自 sx1989827 
浅谈关于 http 的多线程断点续传下
作者: sx1989827 (1 篇文章) 日期: 十一月 11, 2010 在 8:10 下午
评论 (6)
本来这篇文章一直都想写的,只是前两天发点小烧,身体不适,所以耽搁了。我查了下网上资料,发现大部分都是ftp多线程下载的,关于http还真的不多,所以想写篇文章阐述下,自己才疏学浅,哪里写的不好,还望高手见笑了。 前两篇文章都是用wininet来编写的,代码貌似没有问题,但是试验中发现没有办法实现真正的多线程下载,下载速度慢得很,而且即使是多线程,也不能同时internetreadfile。后来看网上说要用异步方式来写,看了下介绍,感觉太麻烦了,听说那些下载软件都是直接用socket来做的,所以自己索性改用socket来封装http数据包了。 我们在启动多线程前先要获得目标文件的content-length,也就是文件大小,根据这个文件的大小来建立文件: char buf[1024]={0}; sprintf(buf,"GET %s HTTP/1.1\r\n" "Accept:*/*\r\n" "User-Agent: sx\r\n" "Host: %s\r\n" "Connection:close\r\n" "Cache-Control: no-cache\r\n" "\r\n\r\n",name,host); s.send(buf,strlen(buf)); int count; char r[1024]={0}; count=s.recv((char*)r,1024); s.close(); char *l=strstr(r,"Content-Length:"); l+=16; char ...
