2008-09-30 5 views
2

Мне нужно реализовать систему промежуточного программного обеспечения для совместного использования файлов, и она должна разделить файлы, не похожие на то, что происходит на bittorrent, где он отправляет и получает отдельные части одновременно из источников varios. Как мне это сделать? Это библиотека или я должен реализовать файл, разбивающий себя?разделяющие файлы для приложения P2P

ответ

4

Разделить файлы на блоки, скажем, 100 КБ каждый. Затем вычислите SHA-хэш (или какой-либо другой алгоритм хеширования) на каждом из блоков. поэтому, если файл 905 КБ, вы бы рассчитали 10 таких хэшей.

Сервер будет содержать файл определения хэша для каждого файла, который он обслуживает. Этот файл определения хеширования будет содержать список всех блоков файла вместе с хешем. Поэтому, если сервер обслуживает наш 905KB-файл с именем test.exe. Тогда у нас будет еще один файл с именем test.exe.hashes, который содержит список из 10 хэшей файла.

Клиент будет загружать файл определения хэша и следить за тем, чтобы он имел все блоки. Клиент может запросить каждый блок по отдельности и после его загрузки, он может снова вычислить хэш на своем конце, чтобы убедиться, что нет никакого искажения.

Вам не нужно физически разделять файл, разделяя файл, просто просматривая его часть, которая вас интересует. Первый блок файла находится в диапазоне от 0 до 102399, следующий блок от 102400 до 204800 и т. Д. Поэтому просто откройте файл, найдите эту позицию, прочитайте данные и закройте файл.

+0

фантастический, спасибо за ответ! – 2008-09-30 19:42:14

0

Посмотрите на реализацию Split & Concat (программное обеспечение GNU).

+0

хорошая идея, спасибо! – 2008-09-30 19:48:11

0

Возможно, вы захотите использовать кодировку Соломона-Рида. Это облегчит получение финальных блоков. Это маршрут, который Microsoft взяла в Avalaunch.

0

Из интереса: Почему бы просто не реализовать BitTorrent или что-то в этом роде? Существует много клиентов OpenSource (т. Е. Azureus), а протокол - really simple. Существует также an article with a little more detail, но в нем есть некоторые расширения - в сомнении, официальная спецификация всегда правильная.

Смежные вопросы