如何编写一个简单的比特流应用程序?

39

如何编写一个简单的比特流应用程序。就像使用比特流库的“Hello World”一样,我的意思是最简单的应用程序,以理解比特流的工作原理。我希望使用Python或C/C++实现,但可以使用任何编程语言。平台也不是问题,但我更喜欢Linux。

关于要使用的库的建议,我已经从http://sourceforge.net/projects/bittorrent/develop下载了一个(我认为是官方比特流)。但是,在http://en.wikipedia.org/wiki/Comparison_of_BitTorrent_clients#Libraries中,我看到了许多其他库。我希望得到关于这个的建议。

如果您只有一台笔记本电脑,如何测试应用程序。


3
阅读规范(http://wiki.theory.org/BitTorrentSpecification),编写代码 :-) - Vijay Mathew
1个回答

90
你应该尝试使用libtorrent(rasterbar)。http://libtorrent.org 如果想要用Python在Linux上编写客户端,可以通过以下命令进行安装:sudo apt-get install python-libtorrent 这是一个使用Python代码下载种子文件的非常简单的示例:
import libtorrent as lt
import time
import sys

ses = lt.session({'listen_interfaces': '0.0.0.0:6881'})

info = lt.torrent_info(sys.argv[1])
h = ses.add_torrent({'ti': info, 'save_path': '.'})
s = h.status()
print('starting', s.name)

while (not s.is_seeding):
    s = h.status()

    print('\r%.2f%% complete (down: %.1f kB/s up: %.1f kB/s peers: %d) %s' % (
        s.progress * 100, s.download_rate / 1000, s.upload_rate / 1000,
        s.num_peers, s.state), end=' ')

    alerts = ses.pop_alerts()
    for a in alerts:
        if a.category() & lt.alert.category_t.error_notification:
            print(a)

    sys.stdout.flush()

    time.sleep(1)

print(h.status().name, 'complete')

4
哇,他们真的实现了“易于使用”的目标。这是一项出色的实现! - Matt Joiner
你能告诉我这段代码 ses.listen_on(6881, 6891) 是做什么的吗?为什么要用这些值? - user745235
.torrent文件的路径 - Arvid
我正在尝试通过提供infohash来获取torrent信息,但是代码在while循环中卡住了 while (not h.has_metadata())。有任何想法吗? - Muaaz Khalid
请问您能否帮忙说明如何在MacOS上进行设置? - Pratap Alok Raj
显示剩余2条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接