关于Bittorrent Peer Wire协议,我有几个问题.我正在尝试使用此规范在Java中实现它.
在Peer Wire Protocol部分中,它表示所有整数都是四字节大端值.AFAIK java使用big endian.这是否意味着如果我想发送阻塞消息
扼流圈:<LEN = 0001> <ID = 0>
我只是写信给sokcet 1然后写0吗?
至于我的第二个问题.在请求一件作品时,我认为多个文件是一个大的连续文件?或者考虑单个文件?因为片段长度不会与文件对齐所以一个索引既可以包含一个文件的结尾又可以包含另一个文件的开头?
至于我的最后一个问题,当我打开与同伴的连接并发送我的握手时,我是否只是继续请求件或请求然后等待一段时间,看看它是否会要求我们提供的东西?谈话是如何进行的?我主要完成了http类型的网络编程,我要求等待响应的东西.但如果我继续请求件我怎么送件?
任何人都可以向我解释或在网上找到我的文章,在技术细节中解释种子是如何工作的,创造中使用了哪种技术?
我是PHP CMS的开发人员,我想为它添加一个BitTorrent功能.CMS已经允许用户上传其他用户可以下载,评论等文件,但我认为如果CMS可以通过BitTorrent通过.torrent元数据文件提供这些下载,或者可以改进(特别是对于低带宽网站)通过磁铁链接,以便共享上传负担.
这看起来非常简单,因为我可以插入大量现有的跟踪器,并且创建所需元数据的过程已有详细记录,但最后一个难题是让网站充当种子文件,以防其他人没有播种(例如,当它新添加时).我花了一段时间搜索,但找不到任何可以通过BitTorrent播种文件的PHP代码,无论是通过跟踪器还是通过DHT.像rtorrent,Vuze等洪流应用程序有很多前端,但我正在寻找纯PHP,因为我不想引入用户在糟糕,锁定的共享主机帐户上无法满足的依赖项.有没有人知道任何能够解决此问题的PHP代码,还是我必须自己动手?
我有大文件移动到很多服务器.现在我们使用rsync,但我想尝试使用bittorent.
我正在研究Deluge的代码,这是一个Python bittorent客户端,但它使用扭曲并且非常复杂.你知道什么高水平吗?
编辑:我刚刚看到Facebook使用Bittorent进行代码部署.也许他们为此发布了他们的lib,但我找不到它.听说过吗?
我在objective-c中创建了torrent scraper,我正在使用AFNetworking来处理HTTP请求.我需要发送跟踪器请求的元信息部分的sha1哈希值.我已成功创建哈希并验证它是否正确.我不能将哈希值放在NSString中,因为它不对二进制数据进行编码,因此我将它放在NSData对象中,然后在要发送的参数中.这就是我现在所拥有的,但我总是得到一个错误,我会假设它是使用我用来发送哈希的方法.我也尝试过编码哈希的url然后把它放在NSString中但没有用
NSMutableDictionary *parameters = [NSMutableDictionary dictionary];
unsigned char infoHash[20];
[self.tracker generateTorrentInfoHash:infoHash];
const char peer_id[20] = "randomstringfornow";
[parameters setObject:[NSData dataWithBytes:&infoHash length:20] forKey:@"info_hash"];
[parameters setObject:[NSData dataWithBytes:&peer_id length:20] forKey:@"peer_id"];
[parameters setObject:@(8080) forKey:@"port"];
[parameters setObject:@(0) forKey:@"uploaded"];
[parameters setObject:@(self.tracker.metaInfo.totalFileSize) forKey:@"left"];
[parameters setObject:@(0) forKey:@"downloaded"];
[parameters setObject:@(0) forKey:@"compact"];
[parameters setObject:@"stopped" forKey:@"event"];
[self getPath:@"" parameters:parameters success:^(AFHTTPRequestOperation *operation, id responseObject) {
NSLog(@"%@",operation.responseString);
} failure:^(AFHTTPRequestOperation *operation, NSError *error) {
NSLog(@"%@",operation.responseString);
}];
Run Code Online (Sandbox Code Playgroud)
有没有人知道AFNetworking是否有可能这样做,或者我希望错过一些简单的事情.
我正在制作一个种子客户端。我解码 torrent 文件并将此请求发送到跟踪器:
http://tracker.mininova.org/announce?uploaded=0&downloaded=0&compact=0&event=started&peer_id=12345678987654321234&port=6881&info_hash=%18%28n%23K%ECt%B7%93S%C5%F1-%F3%1C%18k%CEX%A4&left=0
Run Code Online (Sandbox Code Playgroud)
这就是我收到的:
{'min interval': 1800, 'peers': '', 'interval': 1800, 'complete': 37, 'incomplete': 0}
Run Code Online (Sandbox Code Playgroud)
为什么对等列表为空?有 37 个同伴是播种者,我不应该从他们那里获取一些同伴信息吗?
我已经阅读了有关此主题的许多文档,但是有些内容并不清楚。例如,比特种子文档(http://www.bittorrent.org/beps/bep_0005.html)指出
路由表被细分为“存储桶”,每个存储桶覆盖一部分空间。一个空表有一个存储桶,其ID空间范围为min = 0,max = 2 ^ 160。当将ID为“ N”的节点插入表中时,该节点将被放置在最小<= N <最大的存储桶中。空表只有一个存储桶,因此任何节点都必须位于其中。每个存储桶只能容纳K个节点(当前为8个),然后再变为“满”。当存储桶中充满了已知良好的节点时,除非我们自己的节点ID落入存储桶的范围内,否则无法再添加更多节点。在这种情况下,该存储桶将被两个新存储桶替换,每个新存储桶的范围均为旧存储桶的一半,并且旧存储桶中的节点将分布在两个新存储桶中。对于只有一个存储桶的新表,
关于kademlia路由表,它与其他文档有些不同,在kademlia路由表中,根据节点id的位前缀来排列存储桶,但还有另一件令人困惑的事情。当我们回复“查找节点”请求时,我们必须使用XOR操作找到8个最接近所请求节点的节点。我看到一些实现只是通过路由表中的每个项目执行XOR操作,从而找到8个最接近的项目。在我看来,CPU也在浪费。
一切都已经在桶中了。即使我们使用bit torrent文档系统建议的内容,我们也可以更快地找到可能包含所请求节点ID的存储桶,只需枚举存储桶并检查其上的最小和最大数目即可。然后,该存储桶可能应包含关闭节点,但它们是值最接近的节点,而不是异或最相似的XOR最接近的节点(据我所知)。
我使用0到99的数字进行了一个简单的测试,我想找到8个XOR最接近的数字,它们在所寻找的数字附近,但不在附近。现在,考虑一下我们的存储桶,我猜可能存储桶中的所有节点ID都是最接近的,仅是次要异常。因此,例如,如果我们拿这个存储桶,从左边取一个,从右边取一个,并搜索XOR最近的节点ID,我们将找到我们要寻找的东西,并且没有必要遍历路由中的所有节点表。
我是对的还是我错过了什么?
如果我有两台笔记本电脑并将它们连接到相同的互联网连接,那么使用BitTorrent软件下载相同的torrent文件,跟踪器会看到什么?以及洪流软件将如何表现?
让我们说笔记本电脑AI开始下载torrent文件然后30分钟后,我在笔记本电脑B上下载相同的torrent文件.
这两台笔记本电脑会成为同行并发送对方数据吗?笔记本电脑B会从笔记本电脑A获取数据
torrent文件中的跟踪器是否会认为只有一台笔记本电脑/一个对等方试图下载该文件?
或者跟踪器是否只看到一个公共IP地址,因为他们使用相同的互联网连接?
bittorrent ×10
protocols ×2
afnetworking ×1
dht ×1
file-sharing ×1
http ×1
ios ×1
java ×1
kademlia ×1
math ×1
objective-c ×1
p2p ×1
php ×1
python ×1
routing ×1
torrent ×1
tracker ×1