Проектная лаборатория
Собственный BitTorrent
Этап 05 · Основные этапы
Разбор торрент-файла
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
На этом этапе вы разберёте торрент-файл и выведете сведения о торренте.
Торрент-файл (также называемый файлом метаинформации) содержит словарь bencode со следующими ключами и значениями:
announce:- URL трекера — центрального сервера, отслеживающего пиров, участвующих в раздаче торрента.
info:- Словарь с ключами:
length: размер файла в байтах для торрента с одним файлом.name: предлагаемое имя для сохранения файла или каталога.piece length: количество байт в каждом фрагменте.pieces: объединённые хеши SHA-1 всех фрагментов.
- Словарь с ключами:
Примечание: файлы .torrent содержат байты, не являющиеся допустимыми символами UTF-8. Если ваш язык представляет строки последовательностью символов Unicode (как str в Python), используйте последовательность байтов (например, bytes в Python).
Примечание: для торрентов с несколькими файлами словарь info выглядит немного иначе. В этом задании мы реализуем поддержку только однофайловых торрентов.
На этом этапе мы сосредоточимся на извлечении URL трекера и длины файла в байтах.
Тестирующая система запустит вашу программу следующим образом:
$ ./your_program.sh info sample.torrentОжидаемый вывод:
Tracker URL: http://bittorrent-test-tracker.codecrafters.io/announce
Length: 92063Проверка в вашей IDE
Нужны Node.js, Git, Go 1.24+ для тестеров и инструменты выбранного языка. Тестеры загружаются и запускаются локально; отдельным проектам нужны дополнительные системные зависимости.
Настройка проекта и IDE
1. Создайте проект один раз
node '/opt/graphlms/tools/project-lab/cli.mjs' init bittorrent ./my-bittorrent --language go2. Откройте папку в IDE
cd ./my-bittorrentРеализуйте требования этапа в созданном проекте.
Запустите из папки проекта
node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage ow9Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.