回复让我心酸。
求可以多任务下载,同时可以配置一个任务有N个连接,N个线程下载的源代码。
哎。。。
需求难道一定和描述的字数成正比吗?
N个连接,N个线程,可配置。。。
多任务下载。。。
VCKBASE搜了,百度,google量太大,当然我也搜索过。
我想应该有经典点的代码。麻烦高手推荐下。最好是小一点的。谢谢
7 个解决方案
#1
http下载,可以多线程下载支持断点续传,多线程下载这里指同时下多个目标,而非一个任务分割成多个线程,不过这种需求是否可以类似断点续传进行?
非FTP,使用CHTTPFile类,细节就不说了
我的使用HTTP,断点续传(本次未下载完的下次下载),目前我这有两种办法:1.通过请求头中的Range:0-100 2.比较文件 先取得本地文件,如果文件存在且大小悬殊,则CFile aFile;
aFile.Open(sFileName,CFile::modeWrite | CFile::typeBinary);打开文件,否则aFile.Open(sFileName,CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
通过DWORD dLen = aFile.GetLength();取得文件大小,aFile.Seek(dLen, CFile::begin);移动指针,断点续传就从此处开始。
这是本地文件已经准备好了,现在在准备待下载文件,也定位到dLen的地方,但是使用CHttpFile* pHttpFile = NULL;...
pHttpFile->Seek(....)方法总是不行,一个未知的错误,原因还未知,不过不用这方法同样可以:
nLen = pHttpFile->Read(szBuffer, 1024); //读数据
while(nLen >= 1024)
{
dwDownloadSize += nLen; //已下载大小
if (dLen <= dwDownloadSize -1) //!!! -1
{
aFile.Write(szBuffer, nLen);
}
}
.....
同样可以放在多线程中
非FTP,使用CHTTPFile类,细节就不说了
我的使用HTTP,断点续传(本次未下载完的下次下载),目前我这有两种办法:1.通过请求头中的Range:0-100 2.比较文件 先取得本地文件,如果文件存在且大小悬殊,则CFile aFile;
aFile.Open(sFileName,CFile::modeWrite | CFile::typeBinary);打开文件,否则aFile.Open(sFileName,CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
通过DWORD dLen = aFile.GetLength();取得文件大小,aFile.Seek(dLen, CFile::begin);移动指针,断点续传就从此处开始。
这是本地文件已经准备好了,现在在准备待下载文件,也定位到dLen的地方,但是使用CHttpFile* pHttpFile = NULL;...
pHttpFile->Seek(....)方法总是不行,一个未知的错误,原因还未知,不过不用这方法同样可以:
nLen = pHttpFile->Read(szBuffer, 1024); //读数据
while(nLen >= 1024)
{
dwDownloadSize += nLen; //已下载大小
if (dLen <= dwDownloadSize -1) //!!! -1
{
aFile.Write(szBuffer, nLen);
}
}
.....
同样可以放在多线程中
#2
顶一下
#3
......................
#4
what
#5
收一下
#6
这里有个跨平台的下载库,支持HTTP,FTP,HTTPS,多线程下载,还能在WinCE,Linux,IPhone上跑,你可以参考下
http://www.easygeteasy.com
http://www.easygeteasy.com
#7
#1
http下载,可以多线程下载支持断点续传,多线程下载这里指同时下多个目标,而非一个任务分割成多个线程,不过这种需求是否可以类似断点续传进行?
非FTP,使用CHTTPFile类,细节就不说了
我的使用HTTP,断点续传(本次未下载完的下次下载),目前我这有两种办法:1.通过请求头中的Range:0-100 2.比较文件 先取得本地文件,如果文件存在且大小悬殊,则CFile aFile;
aFile.Open(sFileName,CFile::modeWrite | CFile::typeBinary);打开文件,否则aFile.Open(sFileName,CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
通过DWORD dLen = aFile.GetLength();取得文件大小,aFile.Seek(dLen, CFile::begin);移动指针,断点续传就从此处开始。
这是本地文件已经准备好了,现在在准备待下载文件,也定位到dLen的地方,但是使用CHttpFile* pHttpFile = NULL;...
pHttpFile->Seek(....)方法总是不行,一个未知的错误,原因还未知,不过不用这方法同样可以:
nLen = pHttpFile->Read(szBuffer, 1024); //读数据
while(nLen >= 1024)
{
dwDownloadSize += nLen; //已下载大小
if (dLen <= dwDownloadSize -1) //!!! -1
{
aFile.Write(szBuffer, nLen);
}
}
.....
同样可以放在多线程中
非FTP,使用CHTTPFile类,细节就不说了
我的使用HTTP,断点续传(本次未下载完的下次下载),目前我这有两种办法:1.通过请求头中的Range:0-100 2.比较文件 先取得本地文件,如果文件存在且大小悬殊,则CFile aFile;
aFile.Open(sFileName,CFile::modeWrite | CFile::typeBinary);打开文件,否则aFile.Open(sFileName,CFile::modeCreate | CFile::modeWrite | CFile::typeBinary);
通过DWORD dLen = aFile.GetLength();取得文件大小,aFile.Seek(dLen, CFile::begin);移动指针,断点续传就从此处开始。
这是本地文件已经准备好了,现在在准备待下载文件,也定位到dLen的地方,但是使用CHttpFile* pHttpFile = NULL;...
pHttpFile->Seek(....)方法总是不行,一个未知的错误,原因还未知,不过不用这方法同样可以:
nLen = pHttpFile->Read(szBuffer, 1024); //读数据
while(nLen >= 1024)
{
dwDownloadSize += nLen; //已下载大小
if (dLen <= dwDownloadSize -1) //!!! -1
{
aFile.Write(szBuffer, nLen);
}
}
.....
同样可以放在多线程中
#2
顶一下
#3
......................
#4
what
#5
收一下
#6
这里有个跨平台的下载库,支持HTTP,FTP,HTTPS,多线程下载,还能在WinCE,Linux,IPhone上跑,你可以参考下
http://www.easygeteasy.com
http://www.easygeteasy.com