Проектная лаборатория
Собственный BitTorrent
Этап 08 · Основные этапы
Поиск пиров
Русский перевод заданий CodeCrafters. Примеры подготовлены для Go. Выбор языка меняет команды и результаты, но не текст задания.
Трекеры — центральные серверы, хранящие сведения о пирах, участвующих в раздаче и скачивании торрента.
На этом этапе вы отправите GET-запрос HTTP-трекеру, чтобы найти пиров для скачивания файла.
GET-запрос трекеру
Нужно отправить запрос по URL трекера, извлечённому на предыдущем этапе, включив следующие параметры запроса:
info_hash: информационный хеш торрента.- Длина 20 байт; необходимо URL-кодирование.
- Примечание: это не шестнадцатеричное представление длиной 40 байт.
peer_id: уникальный идентификатор вашего клиента.- Строка длиной 20 символов, которую вы выбираете сами.
port: порт, который прослушивает ваш клиент.- Можно задать
6881; реализовывать эту функциональность в задании не потребуется.
- Можно задать
uploaded: общий объём уже отправленных данных.- Поскольку клиент ещё ничего не отправлял, можно указать
0.
- Поскольку клиент ещё ничего не отправлял, можно указать
downloaded: общий объём уже скачанных данных.- Поскольку клиент ещё ничего не скачивал, можно указать
0.
- Поскольку клиент ещё ничего не скачивал, можно указать
left: количество байт, которое осталось скачать.- Поскольку клиент ещё ничего не скачивал, это полная длина файла (вы извлекли её из торрент-файла на предыдущих этапах).
compact: следует ли использовать компактное представление списка пиров.- В рамках задания задайте
1. - Компактное представление встречается чаще, а некомпактное поддерживается преимущественно для обратной совместимости.
- В рамках задания задайте
Подробнее об этих параметрах — в спецификации протокола BitTorrent.
Ответ трекера
Трекер вернёт словарь bencode с двумя ключами:
interval:- Целое число, указывающее, как часто клиент должен обращаться к трекеру.
- В рамках задания это значение можно игнорировать.
peers.- Строка со списком пиров, к которым может подключиться клиент.
- Каждый пир представлен 6 байтами: первые 4 байта — IP-адрес, последние 2 — номер порта.
Тестирующая система запустит вашу программу следующим образом:
$ ./your_program.sh peers sample.torrentОжидаемый вывод:
165.232.41.73:51556
165.232.38.164:51493
165.232.35.114:51476Проверка в вашей 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 fi9Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.
Результат проверки
go / ЛОКАЛЬНОПодключение к локальной проверке…
Здесь появится результат
Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.