当前位置:首页 » 编程博文
开发技术指南» 文章正文
    引言: BT客户端源码分析之一:总述作者:小马哥日期:2004-6-24 概述:相对于 tracker 服务器来说,BT客户端要复杂的多,Bram Cohen 花了一年 full time 的时间来完成 BT,我估计其中大部分时间是用在 BT 客户端的实现和调试上了。
 

 

    摘要:客户端源码分析之三: storagewrapper 类 作者:小马哥 日期:2004-6-30 storagewrapper 的作用:把文件片断进一步切割为子片断,并且为这些子片断发送 request消息。在获得子片断后,将数据写入磁盘。 请结合 storage 类的分析来看。 几点说明: 1、 为了获取传输性能,bt把文件片断切割为多个子片断。 2、 bt为获取一个子片断,需要向拥有该子片断的p......
 ·浮想b/s中的防御    »显示摘要«
    摘要:原文地址:http://blog.csdn.net/estyle/archive/2004/07/02/32269.aspx欢迎转载!但请注明出处(原文地址)和我的姓名:靳田谢谢啦! ^_^   尽管大家都提“防御性编程”,但我还是比较喜欢“防御”——毕竟防御不是目的,只是措施而已,过分强调难免迷失方向。   首先要弄清楚的问题是:什么是防御?为什么要进行防御?  回答第一个问题,简单地说,防......


BT客户端源码分析之一:总述

bt客户端源码分析之一:总述作者:小马哥日期:2004-6-24

客户端的功能: 【程序编程相关:在 Linux 下提升 bash 权限!

概述:相对于 tracker 服务器来说,bt客户端要复杂的多,bram cohen 花了一年 full time 的时间来完成 bt,我估计其中大部分时间是用在 bt 客户端的实现与调试上了.由于 bt 客户端涉及的代码比较多,我不能再象分析 tracker 服务器那样,走上来就深入到细节之中去,那样的话,我写的晕晕糊糊,大家看起来也不知所云.所以第一篇文章先来谈谈客户端的功能.相关协议,以及客户端的总体架构与相关的类的层次结构.这样,从整体上把握之后,大家在自己分析代码的过程中,就能做到胸有成竹. 【推荐阅读:商业智能该如何开始?

相关协议:对客户端来说,它需要处理两种协议:1.与 tracker 服务器交互的 track http协议.2.与其它 peers 交互的 bt 对等协议. 【扩展信息:在 Linux 下直接使用 ISO 映像

不看代码,只根据 bt 的相关原理,大致可以推测,客户端需要完成以下功能:1.解析 torrent 文件,获取要下载的文件的详细信息,并在磁盘上创建空文件.2.与 tracker服务器 建立连接,并交互消息.3.根据从 tracker 得到的信息,跟其它 peers 建立连接,并下载需要的文件片断4.监听某端口,等待其它peers 的连接,并提供文件片断的上传.

总体架构:从总体上来看,bt客户端实际是以一个服务器的形式在运行.这一点似乎有些难以理解,但确实是这样.为什么是一个服务器了?客户端的主要功能是下载文件,但作为一种p2p软件,同时它必须提供上传服务,也就是它必须守候在某一个端口上,等待其它peers 的连接请求.从这一点上来说,它必须以一个服务器的形式运行.我们在后面实际分析代码的时候,可以看到,客户端复用了 rawserver 类用来实现网络服务器.客户端的代码,是从 download.py 开始的,首先完成功能1,之后就进入服务器循环,在每一次循环过程中,完成功能 2.3.4.其中,rerequester 类负责完成功能2,它通过 rawserver::add_task(),向 rawserver 添加自己的任务函数,这个任务函数,每隔一段时间与 tracker 服务器进行通信.而encoder.connecter 等多个类组合在一起,完成功能3与4.

类层次结构:

bt 客户端涉及的类比较多,我首先大致描述一下这些类的功能,然后给出它们的一个层次结构.

1.rawserver:负责实现网络服务器

2.rerequester:负责与 tracker 通信.它调用 rawserver::add_task() ,向 rawserver 添加自己的任务函数 rerequester::c().

3.encoder:一种 handler类(在分析 tracker 服务器时候提到),负责处理与其它peers建立连接与以及对读取的数据按照bt对等协议进行分析.


...   下一页
    摘要:第九章 方法 一、 实例构造器 1、 前面提到用new操作符创建对象时的三部曲: l 为对象分配内存 l 初始化对象的附加成员(方法表指针和syncblockindex) l 调用实例构造器初始化实例状态 在分配内存时,系统将所有内存位置均置为0值,这就是为什么字段初始化而未赋值时均为0或null值。 不调用实例构造器的情况: l 调用object.memberwiseclone()方法创建实例(......
» 本期热门文章:

©2000-2007 All Rights Reserved. 最佳浏览:1024X768 MSIE