Многочастная загрузка в C #? - PullRequest
5 голосов
/ 13 октября 2009

Прошу прощения за мое невежество по этому вопросу.

Я хотел бы написать приложение на C #, которое может загружать файлы с сервера точно так же, как это делает DownThemAll . DownThemAll, кажется, открывает четыре соединения с HTTP-сервером для загрузки одного и того же файла. Мне просто интересно, существуют ли какие-либо библиотеки, которые могли бы сделать это.

Вот цитата с их сайта об этой функции:

DownThemAll имеет умную технику загрузки, называемую «многочастная загрузка». Он разбивает файлы на несколько разделов, которые загружаются одновременно.

Я также хотел бы иметь возможность приостановить / возобновить загрузку. Это базовая функциональность, которую я хотел бы, мне не обязательно нужна полноценная библиотека менеджера загрузок, но если есть такая, которая может делать эти вещи, то я бы тоже хотел узнать о них. Файлы находятся в защищенном паролем каталоге, размещенном с помощью lighttpd, поэтому мне также понадобится способ аутентификации.

Если нет уже существующих библиотек, которые я мог бы использовать, то какие классы .net мне следует изучить, чтобы можно было это сделать?

Спасибо!

РЕДАКТИРОВАТЬ : изменил название, чтобы оно было более подходящим, и добавил цитату с сайта DownThemAll, объясняющую, что это такое.

2-е РЕДАКТИРОВАНИЕ : Я полагаю, что Свенс опубликовал наиболее подходящий ответ, хотя в качестве комментария: / Это моя вина, так как я неправильно сформулировал название, так как не знал, о чем говорю. Он опубликовал статью , в которой говорится о приостановке / возобновлении загрузки HTTP. В нем также говорится о заголовке Range, который, как мне кажется, я должен использовать:

Заголовок Range может запрашивать более одного диапазона в одном запросе, особенность, называемая «составными диапазонами». Не путайте это с сегментированной загрузкой, которую почти все инструменты загрузки используют для увеличения скорости загрузки. Эти инструменты утверждают, что улучшают скорость загрузки, открывая два или более одновременных соединения, каждое из которых запрашивает свой диапазон файла.

Итак, я хочу использовать диапазон для одновременной загрузки определенных частей файла. Опять же, это, вероятно, не имеет никакого преимущества перед загрузкой файла за один раз. Я просто сделаю это и позволю сделать паузу / возобновление.

Спасибо, ребята!

П.С. Свенс, продолжайте и оставьте комментарий как ответ, чтобы я мог принять его, если хотите.

Ответы [ 5 ]

3 голосов
/ 02 октября 2013

Прошу прощения за публикацию статьи старше Христа, но это:

http://www.codeproject.com/Articles/21053/MyDownloader-A-Multi-thread-C-Segmented-Download-M

кажется, ближе к тому, что спросили.

Текущий помеченный «правильный ответ» хорош для предоставления подпрограммы частичной загрузки на стороне сервера, он в некоторой степени объясняет, что делают заголовки HTTP Range, но это не клиент загрузки.

2 голосов
/ 13 октября 2009

У меня со свенсом на этом http://www.devx.com/dotnet/Article/22533/0/page/2 вроде бы все сказано.

1 голос
/ 13 октября 2009

Класс System.Net.HttpClient должен иметь возможность загружать ваши файлы. Просто вызовите этот класс из потока или пула потоков, и вы сможете одновременно загружать множество файлов.

0 голосов
/ 13 октября 2009

вы можете использовать BITS (Background Intelligent Transfer Service) хорошая статья Дополнительная информация http://msdn.microsoft.com/en-us/library/aa362708(VS.85).aspx http://www.codeproject.com/KB/IP/bitsman.aspx

0 голосов
/ 13 октября 2009

Пространство имен System.Net.WebrequestMethods.Http - хорошее место для начала. Вы, вероятно, хотите использовать Get для загрузки нужных вам файлов.

http://msdn.microsoft.com/en-us/library/system.net.webrequestmethods.http.aspx

...