断点续传大致分了三个步骤。

1、寻找文件已经下载到的指针位置。

long FileLocate(char* path)   /*传入文件位置,返回值为0,则为需要新建下载,大于0则续传 */

{

FILE *fp; long last;

if((fp=fopen(path,"ab+"))==NULL)

{

printf("can not open %s\n",path);

return 0;

}

else

{

fseek(fp,0L,SEEK_END);

last=ftell(fp);

fclose(fp);

return last;

}

}

这里唯一要注意的就是打开方式,不要用wb打开,这样会清空前面已经下载好的数据,而且下载完成后文件的大小是正确的,但是文件数据前端就会丢失掉。

 

2、将文件下载的位置传输到header里面。

header里面有这个参数 Range,通过设置这个参数可以让服务器给你返回你文件指定位置的数据

Range:bytes=512000-  这个意思就是从 512000这个位置开始下载。

服务器正常返回的状态码再此时就应该是:206

还有就是把你要下载的文件的指针位置设置成要传输的位置,然后就开始准备下了。

 

3、从服务器返回的body里面读取数据,将读出来的数据写入到续传的那个文件中就可以了。

 

也希望有兴趣的朋友一块来探讨