frostwire项目源码分析

来源:互联网 发布:网络舞曲最红 编辑:程序博客网 时间:2024/04/28 08:54

Frostwire代码分析

    Frostwire是一个基于其他许多优秀开源项目开发的一款文件分享软件。它的前身是LimeWire Gnutella客户端;但是已经有了很大的变动。

   现在FrostWire已经不再支持Gnutella协议;变成一个BT客户端;并且还内置了播放器能够在线播放音乐和p2p网络中的电影资源。

 

 此项目的主要依赖库如下:

(1)BitTorrent 功能实现主要由frostwire-jlibtorrent实现(包括底层bt协议实现,与服务器 的交互通信等bt客户端的基本功能);

(2)媒体播放器主要源自开源项目MPlayer 

(3)http协议交互来自于Apache Commons项目;

(4)搜索功能使用了H2 databaseLucene indexes这两个库;

(5)JSON解析使用了google-gson库;

 

建立此工程项目所需要的依赖:

(1)JDK1.7以上版本

(2)Apache Ant

(3)Gradle

 

Frostwire-desktop项目代码结构:

 

         代码位置

         包内容

Src/com/forstwire

Frostwire核心功能包,包括搜索、mp3文件获取,JSON引擎,Mplayer播放内核

实际上这个工程只是实现了界面,并调用底层的功能实现。

 

src/com/limegroup/gnutella/gui/

GUI设计,采用Mediator中介者模式;主要有GUIMediator.java(控制主界面)DownloadMediator(控制下载界面)MPlayerMediator(播放)

resources/

存放资源,各种图标

lib/jars

依赖的jar

lib/jars-src

依赖jar包的源码,供后期代码调试使用

lib/messagebundles

存方多国语言的翻译包

 

 

 

 

 

 

 

 

Frostwire-jlibtorrent 项目代码结构:

 

代码位置

包内容

Src/frostwire/jlibtorrent

客户端的核心功能都在这个包中实现,downloadsession管理,DHT网络连接,peer连接,调用底层库jlibtorrent.dll并把接口提供给上层等等。

Src/frostwire/jlibtorrent/alert

Libtorrent运用alert机制通知某一事件的触发这个包包含所有的alert,并提供给接口给外部,当完成某一事件后,比如添加种子会触发ADD_TORRENT这个alert下的事件,程序便会执行此事件触发的操作。

Src/frostwire/jlibtorrent/demo

一些简单的BT下载的demo

Src/frostwire/jlibtorrent/swig

通过swiglibtorrent编译成供java调用的接口,这个给出了连接底层库的所有接口。

 

Frostwire-core项目代码结构

 

代码位置

包内容

Core/frostwire/bittorent

客户端BT下载的核心引擎,UI层就是通过这个包里的下载引擎完成下载的控制,如多线程下载,下载的控制(暂停,删除....)

其他

整个项目依赖的一些库的源码

 

项目运行截图:

 

 


 

BT客户端主要有以下功能

1、解析.torrent文件,获取要下载文件的详细信息

2、与tracker服务器建立连接,并交互信息

3、根据从tracker获取的信息,与其他peer建立连接,并下载所需的文件片段

4、监听某端口,等待其他peer连接

 


0 0
原创粉丝点击