我正在用 Java 构建一个 BitTorrent 客户端应用程序,我有两个小问题:
n文件(不是目录 - 为简单起见),我是否需要创建n具有相应大小的文件?当我从同行那里收到一个片段时,我如何知道它(该片段)属于哪个文件?例如,这是一个包含 2 个文件的 torrent:
TorrentInfo{Created By: ruTorrent (PHP Class - Adrien Gibrat)
Main tracker: http://tracker.hebits.net:35777/tracker.php?do=announce&passkey=5d3ab309eda55c1e7183975099958ab2
Comment: null
Info_hash: c504216ca4a113d26f023a10a1249ca3a6217997
Name: Veronica.2017.1080p.BluRay.DTS-HD.MA.5.1.x264-HDH
Piece Length: 16777216
Pieces: 787
Total Size: null
Is Single File Torrent: false
File List:
TorrentFile{fileLength=13202048630, fileDirs=[Veronica.2017.1080p.BluRay.DTS-HD.MA.5.1.x264-HDH.mkv]}
TorrentFile{fileLength=62543, fileDirs=[Veronica.2017.1080p.BluRay.DTS-HD.MA.5.1.x264-HDH.srt]}
Run Code Online (Sandbox Code Playgroud)
文档没有说太多:https : //wiki.theory.org/index.php/BitTorrentSpecification
小智 8
你做的和我的很相似...
以下粗体字体对您的问题很重要。
1.是的;不
多文件模式下的信息
name:存储所有文件的目录的名称。这纯粹是建议性的。(细绳)
path:包含一个或多个字符串元素的列表,这些元素一起表示路径和文件名。列表中的每个元素对应于目录名或(在最后一个元素的情况下)文件名。例如,文件“dir1/dir2/file.ext”将由三个字符串元素组成:“dir1”、“dir2”和“file.ext”。这被编码为字符串的编码列表,例如 l4:*dir*14:*dir*28:file.exte
单文件模式下的信息
名称:文件名。这纯粹是建议性的。(细绳)
文件名包括文件名。
2.也许;
是否需要创建n个对应大小的文件取决于是否需要下载n个文件。
对等线协议 (TCP)
片:
片段消息是可变长度的,其中 X 是块的长度。有效载荷包含以下信息:
index:整数,指定从零开始的片段索引
begin : 指定片段内从零开始的字节偏移的整数
block:数据块,是index指定的块的子集。
出于多文件情况下的分段边界的目的,将文件数据视为一个长连续流,由按文件 列表中列出的顺序 串联每个文件组成。然后以与单个文件的情况相同的方式确定片段的数量及其边界。片段可能会重叠文件边界。
我很抱歉我的英语,因为我不是母语...
| 归档时间: |
|
| 查看次数: |
1518 次 |
| 最近记录: |