Перейти к контенту

Java-библиотека BitTorrent — реализация протокола

Это библиотека Ttorrent версии 2.0, которая имеет множество улучшений и может быть несовместима с предыдущей версией.

Описание

Ttorrent — это реализация протокола BitTorrent на языке Java, обеспечивающая отслеживание BitTorrent и соответствующие возможности создания и анализа файлов Torrent metainfo. Он предназначен для встраивания в более крупные приложения, но его компоненты также могут использоваться в качестве автономных программ. Скачивать через торрент очень удобно, поэтому и Ttorrent также распространен, а также на сайте programnew.ru можно скачать бесплатные программы.

 

Ttorrent поддерживает следующие BEP(предложения по улучшению BitTorrent):

  • BEP # 0003: спецификация протокола BitTorrent Это базовая официальная спецификация протокола, которую Ttorrent полностью реализует.
  • BEP # 0012: расширение метаданных мульти-трекера Полная поддержка ключа мета-информации списка объявлений, предоставляющего многоуровневый список трекеров.
  • BEP # 0015: протокол UDP-трекера для BitTorrent Протокол UDP-трекера полностью поддерживается в клиенте BitTorrent для отправки запросов на UDP-трекеры. Сама поддержка UDP трекера не планируется.
  • BEP # 0020: Соглашения об идентификаторе однорангового узла Ttorrent использует TO в качестве строки идентификации клиента и в настоящее время использует префикс -T00042- идентификатора клиента.
  • BEP # 0023: трекер возвращает компактные одноранговые списки Компактные одноранговые списки поддерживаются как в клиенте, так и в трекере. В настоящее время трекер поддерживает отправку только компактных списков пиров на запрос объявления.

Этот набор инструментов был реализован как часть системы распространения и развертывания релизов Turn(http://www.turn.com) и используется для максимально эффективного распространения новых сборочных пакетов на большое количество машин в центре обработки данных.

На момент запуска этого проекта существовало несколько реализаций Java протокола BitTorrent, и, к сожалению, ни одна из них не соответствовала нашим потребностям:

  • Vuze, который очень трудно извлечь из их кодовой базы и, следовательно, сложно реинтегрировать в другое приложение;
  • torrent4j, который является в основном неполным и непригодным для использования;
  • Snark’s, который старый и, к сожалению, нестабильный;
  • кусочек, который также был, к сожалению, нестабильным и чрезвычайно медленным.

Эта реализация направлена на создание простой и удобной библиотеки. Здесь не реализованы причудливые расширения протокола: только основы, позволяющие обмениваться файлами и распространять их по протоколу BitTorrent.

Код клиента

// First, instantiate the Client object.
SimpleClient client = new SimpleClient();

// This is the interface the client will listen on(you might need something
// else than localhost here because other peers cannot connect to localhost).
InetAddress address = InetAddress.getLocalHost();

//Start download. Thread is blocked here
try {
  client.downloadTorrent("/path/to/filed.torrent",
          "/path/to/output/directory",
          address);
  //download finished
} catch(Exception e) {
  //download failed, see exception for details
  e.printStackTrace();
}
//If you don't want to seed the torrent you can stop client
client.stop();

Код трекера

// First, instantiate a Tracker object with the port you want it to listen on.
// The default tracker port recommended by the BitTorrent protocol is 6969.
Tracker tracker = new Tracker(6969);

// Then, for each torrent you wish to announce on this tracker, simply created
// a TrackedTorrent object and pass it to the tracker.announce() method:
FilenameFilter filter = new FilenameFilter() {
  @Override
  public boolean accept(File dir, String name) {
    return name.endsWith(".torrent");
  }
};

for(File f : new File("/path/to/torrent/files").listFiles(filter)) {
  tracker.announce(TrackedTorrent.load(f));
}

//Also you can enable accepting foreign torrents.
//if tracker accepts request for unknown torrent it starts tracking the torrent automatically
tracker.setAcceptForeignTorrents(true);

// Once done, you just have to start the tracker's main operation loop:
tracker.start(true);

// You can stop the tracker when you're done with:
tracker.stop();

Производительность записи клиента немного низкая, в основном из-за простого алгоритма кэширования фрагментов.

Оцени статью

Средняя оценка / 5. Количество голосов:

Спасибо, помогите другим - напишите комментарий, добавьте информации к статье.

Или поделись статьей

Видим, что вы не нашли ответ на свой вопрос.

Помогите улучшить статью.

 

Сайдбар