<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://jackxiang.com/post//</link>
<title><![CDATA[[值得实践]HTTP断点续传的基本原理，c语言实现HTTP断点续传。]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Mon, 15 Apr 2013 12:37:24 +0000</pubDate> 
<guid>http://jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	<br/>HTTP断点续传的基本原理<br/>断点续传是我们现在经常接触的概念，那么HTTP协议是如何支持断点续传的呢。我们先从一个例子来看看。<br/><br/>下面是一个断点续传的例子：（使用Net Vampire得到）<br/><br/>I 01-7-12 19:19:23 ------------------------- Attempt 1 ------------------------- <br/>P 01-7-12 19:19:24 Connecting to 127.0.0.3 ... <br/>P 01-7-12 19:19:24 Connected to 127.0.0.3 [127.0.0.3] <br/>S 01-7-12 19:19:24 GET /VS0515AI.EXE HTTP/1.1 <br/>S 01-7-12 19:19:24 Connection: close <br/>S 01-7-12 19:19:24 Host: 127.0.0.3 <br/>S 01-7-12 19:19:24 Accept: */* <br/>S 01-7-12 19:19:24 Pragma: no-cache <br/>S 01-7-12 19:19:24 Cache-Control: no-cache <br/>S 01-7-12 19:19:24 Referer: http://127.0.0.3/ <br/>S 01-7-12 19:19:24 User-Agent: Mozilla/4.04 [en] (Win95; I ;Nav) <br/>S 01-7-12 19:19:24 <br/>R 01-7-12 19:19:24 HTTP/1.1 200 OK <br/>R 01-7-12 19:19:24 Server: Zero Http Server/1.0 <br/>R 01-7-12 19:19:24 Date: Thu, 12 Jul 2001 11:19:24 GMT <br/>R 01-7-12 19:19:24 Cache-Control: no-cache <br/>R 01-7-12 19:19:24 Last-Modified: Tue, 30 Jan 2001 13:11:30 GMT <br/>R 01-7-12 19:19:24 Content-Type: application/octet-stream <br/>R 01-7-12 19:19:24 Content-Length: 15143086 <br/>R 01-7-12 19:19:24 Connection: close <br/>R 01-7-12 19:19:24 <br/>P 01-7-12 19:19:25 Data transfer started <br/>I 01-7-12 19:19:32 Job Stopped by user <br/>I 01-7-12 19:19:33 Received 5 275 648 bytes in 0:00:07 (691 435 bytes/s)<br/><br/> <br/><br/>I 01-7-12 19:19:40 ------------------------- Attempt 2 ------------------------- <br/>P 01-7-12 19:19:40 Connecting to 127.0.0.3 ... <br/>P 01-7-12 19:19:40 Connected to 127.0.0.3 [127.0.0.3] <br/>S 01-7-12 19:19:40 GET /VS0515AI.EXE HTTP/1.1 <br/>S 01-7-12 19:19:40 Connection: close <br/>S 01-7-12 19:19:40 Host: 127.0.0.3 <br/>S 01-7-12 19:19:40 Accept: */* <br/>S 01-7-12 19:19:40 Pragma: no-cache <br/>S 01-7-12 19:19:40 Cache-Control: no-cache <br/>S 01-7-12 19:19:40 Referer: http://127.0.0.3/ <br/>S 01-7-12 19:19:40 User-Agent: Mozilla/4.04 [en] (Win95; I ;Nav) <br/>S 01-7-12 19:19:40 Range: bytes=5275648- <br/>S 01-7-12 19:19:40 <br/>R 01-7-12 19:19:40 HTTP/1.1 206 Partial Content <br/>R 01-7-12 19:19:40 Server: Zero Http Server/1.0 <br/>R 01-7-12 19:19:40 Date: Thu, 12 Jul 2001 11:19:40 GMT <br/>R 01-7-12 19:19:40 Cache-Control: no-cache <br/>R 01-7-12 19:19:40 Last-Modified: Tue, 30 Jan 2001 13:11:30 GMT <br/>R 01-7-12 19:19:40 Content-Type: application/octet-stream <br/>R 01-7-12 19:19:40 Content-Range: bytes 5275648-15143085/15143086 <br/>R 01-7-12 19:19:40 Content-Length: 9867438 <br/>R 01-7-12 19:19:40 Connection: close <br/>R 01-7-12 19:19:40 <br/>P 01-7-12 19:19:40 Data transfer started <br/>I 01-7-12 19:19:41 Job Stopped by user <br/>I 01-7-12 19:19:41 Received 1 124 756 bytes in 0:00:01 (969 617 bytes/s)<br/><br/> <br/><br/>第一次是普通的传输；第二次由于没有传完全，就发出了Range这个头部，从5275648字节开始传输（默认是按字节算），回应使用206状态值，表示现在开始部分传输，回复Content-Length头部，表示传输的部分，用字节记，然后就与普通传输没有区别了。<br/><br/>来自：http://blog.csdn.net/sendy888/article/details/1719105<br/><br/>c语言实现HTTP断点续传：<br/>断点续传大致分了三个步骤。<br/>1、寻找文件已经下载到的指针位置。<br/>long FileLocate(char* path)&nbsp;&nbsp; /*传入文件位置，返回值为0，则为需要新建下载，大于0则续传 */<br/>&#123;&nbsp;&nbsp;<br/>&nbsp;&nbsp;FILE *fp;&nbsp;&nbsp;long last;&nbsp;&nbsp;<br/>&nbsp;&nbsp;if((fp=fopen(path,&quot;ab+&quot;))==NULL)<br/>&nbsp;&nbsp;&#123;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;printf(&quot;can not open %s&#92;n&quot;,path);&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return 0;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&nbsp;&nbsp;else&nbsp;&nbsp;<br/>&nbsp;&nbsp;&#123;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;fseek(fp,0L,SEEK_END);&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;last=ftell(fp);&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;fclose(fp);&nbsp;&nbsp;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&nbsp;&nbsp;return last;&nbsp;&nbsp;<br/>&nbsp;&nbsp;&#125;&nbsp;&nbsp;<br/>&#125;<br/>这里唯一要注意的就是打开方式，不要用wb打开，这样会清空前面已经下载好的数据，而且下载完成后文件的大小是正确的，但是文件数据前端就会丢失掉。<br/> <br/>2、将文件下载的位置传输到header里面。<br/>header里面有这个参数 Range，通过设置这个参数可以让服务器给你返回你文件指定位置的数据<br/>Range:bytes=512000-&nbsp;&nbsp;这个意思就是从 512000这个位置开始下载。<br/>服务器正常返回的状态码再此时就应该是：206<br/>还有就是把你要下载的文件的指针位置设置成要传输的位置，然后就开始准备下了。<br/> <br/>3、从服务器返回的body里面读取数据，将读出来的数据写入到续传的那个文件中就可以了。<br/> <br/>也希望有兴趣的朋友一块来探讨<br/>来自：http://alloxa.blog.51cto.com/1427286/412451<br/>
]]>
</description>
</item><item>
<link>http://jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [值得实践]HTTP断点续传的基本原理，c语言实现HTTP断点续传。]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>