一、torrent结构分析
上图为文本工具打开torrent文件,里面的信息并不复杂,是经过bencoding编码后生成的文件,bencoding编码可查看具体协议,下面维基百科介绍的文件格式:
announce - tracker的URL
announce-list(可选):备用tracker服务器列表(列表)
creation date(可选):种子创建的时间,Unix标准时间格式,从1970 1月1日 00:00:00到创建时间的秒数(整数)
comment(可选):备注(字符串)
created by(可选):创建人或创建程序的信息(字符串)
info - 该条映射到一个字典,该字典的键将取决于共享的一个或多个文件:
name - 建议保存到的文件和目录名称
md5sum(可选):同单文件结构中相同
piece length - 每个文件块的字节数。通常为 = 256KB = 262144B
pieces - 每个文件块的SHA-1的集成Hash。因为SHA-1会返回160bit的Hash,所以pieces将会得到1个160-bit的整数倍的字符串。和一个length(相当于只有一个文件正在共享)或files(相当于当多个文件被共享):
length - 文件的大小(以字节为单位)
//当是种子描述的是目录时,有下面files字段
files - 一个字典的列表(每个字典对应一个文件)与以下的键:
path - 一个对应子目录名的字符串列表,最后一项是实际的文件名称
length - 文件的大小(以字节为单位)
md5sum(可选):同单文件结构中相同
在
ttorent 开源项目中,com.turn.ttorent.torrent.Torrent.java定义了相应的类型和方法,现在就依赖这里提供的方法来创建torrent文件
注:这个项目要依赖几个第三方jar包,你看readme,到网上下载相应的jar就可O(∩_∩)O~
二、torrent制作
1.因为在android中运行,我就自己封装了一次这个方法,供activity调用
/**创建种子文件
* @param sourceFile 共享文件
* @param torrentFile torrent文件
* @param trackerURL tracker URL 格式:http://192.168.1.111:6969/announce
* @param createBy author
* @return Torrent
* */
@Override
public Torrent createTorrentFile(File sourceFile, File torrentFile,
URI announceURI,String createBy) {
OutputStream fos = null;
try {
fos = new FileOutputStream(torrentFile);
BtClient_Torrent=Torrent.create(sourceFile, announceURI, createBy); //这是Torrent提供的方法,详情请参考源码
BtClient_Torrent.save(fos);
} catch (Exception e) {
e.printStackTrace();
}finally{
if (fos != null) {
try {
fos.close();
} catch (IOException ioe) {
ioe.printStackTrace();
}
}
}
return BtClient_Torrent;
}
调用此方法,生成一个*.torrent结尾的文件
注:这里面主要用到的是bencode编码,详细编码可以参考维基百科,并且在这个项目里的com.turn.ttorrent.bdoce中封装了相应的编码方法,直接调用即可
torrent文件制作好了,接下来是前面所提到的“做种”
bt分析之bt种子发布---做种(2)