我有两个 Java 库。 一个连接到 DHT 并可以成功下载 torrent 文件。 另一个下载与 torrent 相关的实际数据。
Torrent 客户端库期望在 Torrent 中有一个 announce 或 announce-list 部分,并且不理解“节点”条目。
问题是我如何更改 torrent 客户端代码以理解 torrent 文件的“节点”部分。 或者 如何根据一组 ip:port DHT 对等地址计算跟踪器 URL?
我可以通过猜测端口号并在其上附加/announce 来猜测 url。但这肯定不对吗?
有人知道这是怎么回事吗?
最佳答案
对于仅 DHT 操作,您不需要公布 URL。如果库本身需要一个,您可以插入一个虚拟 url,格式为 dht://<infohash in hex>
很常见,但没关系,因为它不会被使用。
另一方面,DHT 部分不需要 nodes
要执行查找,它只需根据 torrent 的 infohash 进行操作。节点可以可选地注入(inject)dht客户端进行引导,例如通过对它们执行 ping 命令,但如果它已经被引导,则不需要这样做。
一旦 DHT 客户端完成其 get_peers
和 announce
查找对等列表可以注入(inject)到 torrent 客户端。
由于您正在使用我的图书馆:您可以使用 PeerLookupTask从 DHT 和 AnnounceTask 中读取 torrent peer 列表将您的种子端口添加到列表中。获得的 IP 和端口必须传递给 torrent 客户端。 GetPeers CLI 命令包含如何使用第一部分的示例。 还有utility methods应该涵盖常见用例。
关于java - 将 DHT 和 Torrent Client 拼接在一起,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43690254/