如何打开多个连接下载单个文件
本文关键字:下载 单个 文件 连接 何打开 | 更新日期: 2023-09-27 18:16:49
我知道有些服务器不允许这样做,但有些服务器确实支持多个连接。我能够下载部分文件并在下载最后一部分后将它们组合起来,因为我为每个文件部分使用单独的后台工作人员…所以它很慢,一次只能下载一个文件部分。我想立即开始下载每个文件部分。但我不知道该怎么做。告诉我哪一种方法更快,以及如何使用它们。
Backgroundworker
Threads
ThreadPool
谢谢你的帮助。
如果你通过HTTP下载文件,您可以使用以下方法:
http://msdn.microsoft.com/en-us/library/7fy67z6d.aspx所以你必须把你的文件分成多个临时文件,然后合并它们。
但是你必须确保这个功能在服务器端是启用的(我不知道它是否是默认的)。
正如一些人所说,你将获得性能,这就是为什么免费下载管理器如此有用:它可以同时下载文件的多个部分。
在多线程中:
class FileDownloader{
int Start;
int Count;
string PathTemp;
string Url;
FileDownloader(url,start,count){
url = Url;
Start =start;
Count = count;
PathTemp = Path.GetTempFileName()
}
void DoDownload(){
//do your thing with stream and request and save it to PathTemp
}
}
下面是初始化下载列表的代码:
List<FileDownloader> filewonloadersList = new ListFileDownloader>();
System.Net.WebRequest req = System.Net.HttpWebRequest.Create("http://stackoverflow.com/robots.txt");
req.Method = "HEAD";
System.Net.WebResponse resp = req.GetResponse();
int responseLength = int.Parse(resp.Headers.Get("Content-Length"));
for(int i = 0;i<response.Length;i = i + 1024){
filewonloadersList.Add(new FileDownloader("http://stackoverflow.com/robots.txt",i,1024));
}
你的程序将在一个列表中初始化X FileDownloader(没有把这个逻辑放在这里,我专注于线程的东西)
List<Thread> threadList = new List<Thread>();
foreach(FileDownloader aFildeDownloader in filewonloadersList)
{
Thread aThread = new Thread(aFildeDownloader.DoDownload) //this method will be called when the thread starts
threadList.Add(aThread);
aThread.Start();
}
foreach(Thread aThread in threadList)
{
aThread.Join();//will wait until the thread is finished
}
//all the downloader finished their work now you can go through your downloader list and concatenante the temps files