摘要: BT种子文件使用了一种叫bencoding的编码方法来保存数据。bencoding现有四种类型的数据:srings(字符串),integers(整数),lists(列表),dictionaries(字典)编码规则如下:strings(字符串)编码为:字符串长度:字符串例如:4:test 表示为字符串"test"4:例子 表示为字符串“例子”字符串长度单位为字节没开始或结束标记integers(整数)编码为:i整数e开始标记i,结束标记为e例如:i1234e 表示为整数1234i-1234e 表示为整数-1234整数没有大小限制i0e 表示为整数0i-0e 为非法以0开头的为非法如: 阅读全文
posted @ 2011-01-13 14:59 有一 阅读(1348) 评论(0) 推荐(0) 编辑
摘要: 在知道种子文件采取的编码方式后,我们现在可以来看一个种子文件具体是如何生成的了。在BT中,生成种子文件的可执行模块是btmaketorrent.py(命令行模式)或者btmaketorrentgui.py(图形界面模式),通过分析,可以知道它们最终都将调用函数make_meta_files进行种子文件的生成,区别仅仅在于提供给这个函数的参数从何而来。命令行模式下的程序很简单,即直接从命令行下获取参数,GUI部分的程序以后再和下载客户端的图形界面程序一起分析,现在我们先直接切入正题。 BitTorrent/makemetafile.py模块中提供函数make_meta_files。它的参数意义如 阅读全文
posted @ 2011-01-13 11:05 有一 阅读(1290) 评论(0) 推荐(0) 编辑
摘要: 发信人: wolfenstein (NeverSayNever), 个人文集标 题: BT源代码学习心得(三):种子文件的编码方式发信站: 水木社区 (Mon Aug 1 20:33:37 2005), 文集(本文包含HTML标记,终端模式下可能无法正确浏览) 昨天家里居然断了一天网,ft。 BT的作者使用了一种比较简单易懂的编码方式来对设计种子文件。这种编码方式能够很简单得对python中的各种数据类型,如字符串,整数,列表,字典等进行编码。而且对于类型的嵌套,如一个列表中的元素又是一个列表等情况能够进行很好得处理。 BitTorrent/bencode.py模块负责进行编码解码的工作。函数 阅读全文
posted @ 2011-01-13 11:04 有一 阅读(505) 评论(0) 推荐(0) 编辑
摘要: 发信人: wolfenstein (NeverSayNever), 个人文集标 题: BT源代码学习心得(二):程序运行参数的获取发信站: 水木社区 (Sat Jul 30 21:08:27 2005), 文集(本文包含HTML标记,终端模式下可能无法正确浏览) 把这部分单独列举出来,是因为我觉得BT的程序在处理配置参数方面的这部分代码很有参考价值。 程序的配置参数首先来源于BitTorrent/defaultargs.py。这个模块中包含了一些参数的默认值,由于它们是直接编译进BT的模块中,因此即使其它的配置文件都丢失后,程序还是有一些默认值可以作为参数。defaultargs.py中定义了 阅读全文
posted @ 2011-01-13 11:02 有一 阅读(421) 评论(0) 推荐(0) 编辑
摘要: 发信人: wolfenstein (NeverSayNever), 个人文集标 题: BT源代码学习心得(一):总体描述发信站: 水木社区 (Fri Jul 29 21:24:18 2005), 文集(本文包含HTML标记,终端模式下可能无法正确浏览) BT的源代码是使用python写的,这是一种动态类型的语言,所有的对象不需要定义其类型,任何对象可以作为参数传入某个函数中,唯一的要求是当调用该对象的某个方法时,它必须存在。另外这种语言提供了大量的模块,这些模块中很多都能在不同的平台实现其功能,大大得方便了编写跨平台程序。 在BT的代码中,主要功能都有命令行模式和图形界面模式两种执行方式,但最 阅读全文
posted @ 2011-01-13 11:01 有一 阅读(545) 评论(0) 推荐(0) 编辑
摘要: 作者:小马哥日期:2004-6-10本篇文章分析Tracker类,它在track.py文件中。在分析之前,我们把前几篇文章的内容再回顾一下,以理清思路。BT的源码,主要可以分为两个部分,一部分用来实现tracker服务器,另一部分用来实现BT的客户端。我们这个系列的文章围绕tracker服务器的实现来展开。BT客户端与tracker服务器之间,通过trackHTTP协议进行通信,而BT客户端之间以BT对等协议进行通信。Tracker服务器的职责是搜集客户端的信息,并帮助客户端相互发现对方,从而使得客户端之间能够相互建立连接,进而互相能下载所需的文件片断。在实现tracker服务器的时候,首先是 阅读全文
posted @ 2011-01-13 10:38 有一 阅读(1065) 评论(0) 推荐(0) 编辑
摘要: tracker服务器是BT下载中必须的角色。一个BT client 在下载开始以及下载进行的过程中,要不停的与 tracker 服务器进行通信,以报告自己的信息,并获取其它下载client的信息。这种通信是通过 HTTP 协议进行的,又被称为 tracker HTTP 协议,它的过程是这样的: client 向 tracker 发一个HTTP 的GET请求,并把它自己的信息放在GET的参数中;这个请求的大致意思是:我是xxx(一个唯一的id),我想下载yyy文件,我的ip是aaa,我用的端口是bbb。。。 tracker 对所有下载者的信息进行维护,当它收到一个请求后,首先把对方的信息记录下来 阅读全文
posted @ 2011-01-13 10:10 有一 阅读(638) 评论(0) 推荐(0) 编辑