帮酷LOGO
  • 显示原文与译文双语对照的内容
Android BitTorrent library

  • 源代码名称:ttorrent
  • 源代码网址:http://www.github.com/mpetazzoni/ttorrent
  • ttorrent源代码文档
  • ttorrent源代码下载
  • Git URL:
    git://www.github.com/mpetazzoni/ttorrent.git
  • Git Clone代码到本地:
    git clone http://www.github.com/mpetazzoni/ttorrent
  • Subversion代码到本地:
    $ svn co --depth empty http://www.github.com/mpetazzoni/ttorrent
    Checked out revision 1.
    $ cd repo
    $ svn up trunk
  • Ttorrent,这是BitTorrent协议的一个Java实现

    Build Status

    描述

    收费 Ttorrent 是BitTorrent协议的纯java实现,提供了一个BitTorrent跟踪器,一个BitTorrent客户端以及相关的种子元信息文件创建和解析功能。 它被设计成嵌入大型应用程序中,但是它的组件也可以作为独立的程序使用。

    Ttorrent支持以下 BEPs ( 。bt增强建议):

    • BEP#0003: BitTorrent协议规范
      这是Ttorrent实现的基本官方协议规范。
    • BEP#0012: 多跟踪器元数据扩展
      完全支持 announce-list 元信息键提供分层追踪器列表。
    • BEP#0015: 用于BitTorrent的UDP追踪协议
      BitTorrent客户端完全支持UDP跟踪协议,以便向UDP跟踪程序发出通知请求。 UDP跟踪器支持本身被计划。
    • BEP#0020: 对等标识约定
      Ttorrent使用 TO 作为客户端标识字符串,当前使用 -T00042- 客户机ID前缀。
    • BEP#0023: Tracker返回 compact 对等列表
      客户端和跟踪程序都支持 compact 对等列表。 目前,追踪器只支持将 compact 对等列表发送回通知请求。

    历史

    这个工具套件是作为( 打开 http://www.turn.com ) 发布分发和部署系统的一部分实现的,用于在数据中心中高效地分发新的。 这个项目启动时,协议的Java实现很少存在,并且不幸的是它们都不符合我们的需要:

    • 在vuze中很难提取代码,因此很难集成到其他应用程序中;
    • torrent4j,它主要是不完整和不可用的;
    • 而snark则是老的,不幸的是不稳定的;
    • bitext,它也很不稳定,而且非常慢。

    这里实现旨在提供一个 down-to-earth,简单易用的库。 这里没有实现任何花哨的协议扩展: 只允许通过BitTorrent协议交换和分发文件的基础。

    目前,BitTorrent客户端的写性能非常差,但已经测量到,跨几个数据中心的150MB 个文件的分发不超过10秒,初始播种服务器的网络开销只有 very 。

    :如何使用

    作为独立程序

    当使用 -h 命令行标志调用时,客户端。跟踪器和种子文件操作工具都将在控制台上显示一个用法消息。

    使用 ttorrent 是项目中的库,你需要对 ttorrent的最新版本声明依赖。 例如如果使用 Maven,请在你的pom部分中添加以下内容:

     <dependencies>
    . . .
     <dependency>
     <groupId>com.turn</groupId>
     <artifactId>ttorrent-core</artifactId>
     <version>1.5</version>
     </dependency>
     </dependencies>

    如果使用 Gradle,则需要一个类似于这样的行:

    compile 'com.turn:ttorrent-core:1.5'

    感谢 Anatoli Vladev在 #16. 中的代码示例

    客户端代码
    // First, instantiate the Client object.Client client =newClient(
     // This is the interface the client will listen on (you might need something// else than localhost here).InetAddress.getLocalHost(),
     // Load the torrent from the torrent file and use the given// output directory. Partials downloads are automatically recovered.SharedTorrent.fromFile(
     newFile("/path/to/your.torrent"),
     newFile("/path/to/output/directory")));// You can optionally set download/upload rate limits// in kB/second. Setting a limit to 0.0 disables rate// limits.client.setMaxDownloadRate(50.0);
    client.setMaxUploadRate(50.0);// At this point, can you either call download() to download the torrent and// stop immediately after...client.download();// Or call client.share(...) with a seed time in seconds:// client.share(3600);// Which would seed the torrent for an hour after the download is complete.// Downloading and seeding is done in background threads.// To wait for this process to finish, call:client.waitForCompletion();// At any time you can call client.stop() to interrupt the download.
    跟踪代码
    // 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 =newTracker(newInetSocketAddress(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 =newFilenameFilter() {
     @Overridepublicbooleanaccept(Filedir, Stringname) {
     return name.endsWith(".torrent");
     }
    };for (File f :newFile("/path/to/torrent/files").listFiles(filter)) {
     tracker.announce(TrackedTorrent.load(f));
    }// Once done, you just have to start the tracker's main operation loop:tracker.start();// You can stop the tracker when you're done with:tracker.stop();

    跟踪下载进度

    你可以在 Client 实例上注册 Observer 来跟踪下载的进度和种子的状态。 每次下载完成时,观察者都会被更新:

    client.addObserver(newObserver() {
     @Overridepublicvoidupdate(Observableobservable, Objectdata) {
     Client client = (Client) observable;
     float progress = client.getTorrent().getCompletion();
     // Do something with progress. }
    });

    许可证

    这个BitTorrent库是按照Apache软件许可证版本 2.0的条款发布的。 有关详细信息,请参阅复制文件。

    作者和贡献者

    • Maxime Petazzoni <maxime.petazzoni@bulix.org> ( SignalFuse,公司的软件工程师)
      原始作者,主要开发人员和维护者
    • David Giffin <david@etsy.com>
      提供并行散列和多文件种子支持。
    • Thomas Zink <thomas.zink@uni-konstanz.de>
      修正了当种子总大小是工件大小的倍数时的长度计算问题。
    • Johan <<parent_johan@yahoo.com>>
      修复了在unfresh对等 Collection 中的Bug 问题,以及在 Windows 平台上下载完成的问题。
    • Dmitriy Dumanskiy
      从 Ant 到 Maven 提供了 switch 。
    • Alexey Ptashniy
      修正了整数溢出计算中的整数溢出问题。

    以及许多在GitHub上有帮助的贡献者 ! 感谢大家。

    警告

    • 客户端写性能有点差,主要是由于( 也也) 简单片缓存算法。

    在所有的领域都欢迎贡献,上几点更是如此 !




    Copyright © 2011 HelpLib All rights reserved.    知识分享协议 京ICP备05059198号-3  |  如果智培  |  酷兔英语