расщепление файлов для приложения P2P - PullRequest
2 голосов
/ 30 сентября 2008

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

Ответы [ 4 ]

4 голосов
/ 30 сентября 2008

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

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

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

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

0 голосов
/ 29 марта 2009

Из интереса: почему бы просто не внедрить BitTorrent или что-то в этом роде? Существует много клиентов OpenSource (т. Е. Azureus ), а протокол действительно прост . Есть также статья с более подробной информацией , но она содержит некоторые расширения - в сомнении, официальная спецификация всегда верна.

0 голосов
/ 29 марта 2009

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

0 голосов
/ 30 сентября 2008

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

...