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 database和Lucene 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
客户端的核心功能都在这个包中实现,download,session管理,DHT网络连接,peer连接,调用底层库jlibtorrent.dll并把接口提供给上层等等。
Src/frostwire/jlibtorrent/alert
Libtorrent运用alert机制通知某一事件的触发这个包包含所有的alert,并提供给接口给外部,当完成某一事件后,比如添加种子会触发ADD_TORRENT这个alert下的事件,程序便会执行此事件触发的操作。
Src/frostwire/jlibtorrent/demo
一些简单的BT下载的demo
Src/frostwire/jlibtorrent/swig
通过swig将libtorrent编译成供java调用的接口,这个给出了连接底层库的所有接口。
Frostwire-core项目代码结构
代码位置
包内容
Core/frostwire/bittorent
客户端BT下载的核心引擎,UI层就是通过这个包里的下载引擎完成下载的控制,如多线程下载,下载的控制(暂停,删除....)
其他
整个项目依赖的一些库的源码
项目运行截图:
BT客户端主要有以下功能
1、解析.torrent文件,获取要下载文件的详细信息
2、与tracker服务器建立连接,并交互信息
3、根据从tracker获取的信息,与其他peer建立连接,并下载所需的文件片段
4、监听某端口,等待其他peer连接
- frostwire项目源码分析
- 编译frostwire项目jlibtorrent_jni.cpp
- Ceilometer项目源码分析----ceilometer项目源码结构分析
- 《转》 Ceilometer项目源码分析----ceilometer项目源码结构分析
- Frostwire工程项目的建立
- 项目源码分析--如此精辟
- mjpg-streamer项目源码分析
- mjpg-streamer项目源码分析
- mjpg-streamer项目源码分析
- mjpg-streamer项目源码分析
- Elastic-Job项目源码分析3-- 浅谈源码分析
- BT开源项目Snark源码分析
- android中notePad示例项目源码分析
- mjpg-streamer项目源码分析 2
- Appium源码项目的目录结构分析
- Appium 项目的源码目录结构分析
- 项目开发-dtree.js源码分析
- 开源项目之EventBus 源码分析
- Mac 下配置SVN服务器
- 我佩服-WPF(2)
- UVa 11572
- java 反射 reflect
- Linux下抓取log的方法
- frostwire项目源码分析
- 希尔排序(shellsort)
- Hibernate处理一个实体映射多张相同结构的数据表--动态映射
- Mybatis入门(自己入门)
- 多客户端上传服务器文档使用scp命令不需要输入密码
- OpenCV学习:将图像转为二值图像(函数cvtColor和函数threshold)
- 为eclipse离线安装hibernate tools插件
- Algorithms—150.Evaluate Reverse Polish Notation
- Github上README.md介绍 语法