Проектная лаборатория

Собственный BitTorrent

0 / 19этапов пройдено

Этап 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 go

2. Откройте папку в IDE

cd ./my-bittorrent

Реализуйте требования этапа в созданном проекте.

Запустите из папки проекта

node '/opt/graphlms/tools/project-lab/cli.mjs' submit --stage fi9

Запускайте submit из папки проекта. Это локальные проверки, а не сертификаты или результаты аккаунта CodeCrafters.

Результат проверки

go / ЛОКАЛЬНО

Подключение к локальной проверке…

Здесь появится результат

Запустите submit в терминале. Страница обновляет результаты каждые 8 секунд.

GraphLMS — инженерная лаборатория роста