我第一次使用磁铁链接.好奇它是如何工作的,我查看了规格并没有找到任何答案.维基说的xt
意思是"确切的主题",然后是格式(btih
在本例中),带有SHA1哈希.我看到base32提到,知道每个字符5位和32个字符,我发现它只有160位,这正是SHA1的大小.
没有IP地址或任何东西的空间,它只是一个SHA1.那么BitTorrent客户端如何找到实际文件呢?我打开了URL Snooper以查看它是否访问了一个页面(使用TCP)或进行了查找等,但没有任何反应.我不知道客户端如何找到同行.这是如何运作的?
哈希是什么?它是所有文件哈希数组的哈希值吗?也许它是所需的实际torrent文件的哈希值(剥离某些信息)?
在虚拟机中,我尝试了与uTorrent(新安装的)的磁力链接,并设法找到同行.第一个同伴来自哪里?它很新鲜,没有其他种子.
我正试图在Laravel中实现一个bittorrent跟踪器.但是,由于下载无法启动,我现在卡住了.有一个同伴似乎是播种,我100%确定它是可连接的.但是,当我在另一台机器上运行第二个客户端时,下载将无法启动.它停留在"连接到同行"(uTorrent).
来自跟踪器,当客户发布通知时,我发送以下响应:
d8:intervali1000e12:min intervali300e5:peers18:???i???XÚJU?6e
Run Code Online (Sandbox Code Playgroud)
在下载客户端中,我有以下数据:
这是我的公告代码:
<?php
namespace App\Http\Controllers\Announce;
use App\Helpers\BencodeHelper;
use App\Models\Peer;
use App\Models\PeerTorrent;
use App\Models\Torrent;
use App\Models\User;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
use Illuminate\Routing\Controller;
use Illuminate\Support\Facades\Input;
use Illuminate\Support\Facades\Log;
class AnnounceController extends Controller
{
const __INTERVAL = 1000;
const __TIMEOUT = 120;
const __INTERVAL_MIN = 60;
const __MAX_PPR = 20;
public function announce(Request $request)
{
Log::info($request->fullUrl());
$status = 200;
$content = "";
$passkey = Input::get('passkey');
$peer_id = Input::get('peer_id');
$port = Input::get('port');
$info_hash = Input::get('info_hash');
$downloaded = …
Run Code Online (Sandbox Code Playgroud) 如果我有一个没有任何跟踪器的洪流,我刚刚开始了一个比特的客户端,所以我还没有同行...我怎么知道谁在DHT中首先连接?好像我必须知道DHT中至少有一个节点才能开始....
我正在寻找关于如何逐步实现bittorrent协议的教程/博客文章.这个怎么运作?你如何向同行提出要求?和追踪者交谈.
我不介意编程语言(java,ruby,perl,c#)
是否有适合Java的BitTorrent库?我需要编写一个简单的torrent客户端,但如果我不必从头开始编写所有内容,那就太棒了.
我正在尝试使用BEncoding ObjC类来解码.torrent
文件.
NSData *rawdata = [NSData dataWithContentsOfFile:@"/path/to/the.torrent"];
NSData *torrent = [BEncoding objectFromEncodedData:rawdata];
Run Code Online (Sandbox Code Playgroud)
当我NSLog
torrent
得到以下内容时:
{
announce = <68747470 3a2f2f74 6f727265 6e742e75 62756e74 752e636f 6d3a3639 36392f61 6e6e6f75 6e6365>;
comment = <5562756e 74752043 44207265 6c656173 65732e75 62756e74 752e636f 6d>;
"creation date" = 1225365524;
info = {
length = 732766208;
name = <7562756e 74752d38 2e31302d 6465736b 746f702d 69333836 2e69736f>;
"piece length" = 524288;
....
Run Code Online (Sandbox Code Playgroud)
如何将其name
转换为NSString?我试过了..
NSData *info = [torrent valueForKey:@"info"];
NSData *name = [info valueForKey:@"name"]; …
Run Code Online (Sandbox Code Playgroud) 还有更多要补充的内容.是否可以仅使用HTML和JavaScript构建torrent客户端.你不能使用像Java,ActiveX,NaCl这样的东西......如果是的话,请给出高级描述.
我对前端dev没有太多了解,但我认为websockets能够进行网络连接(是否可以将一个客户端连接到另一个客户端,而不需要通过服务器获取所有数据?).我知道您无法使用JavaScript编写文件,所以我认为要下载的文件必须完全保存在内存中,否则客户端必须使用HTML5中的一个新API来存储内容.
我有兴趣了解在Rails应用程序中处理大型文件上传的不同方法,2-5Gb文件.
据我所知,为了传输这种大小的文件,需要将其分解为更小的部分,我已经做了一些研究,这是我到目前为止所做的.
可以像FTP一样恢复所有这些方法,我不想使用FTP的原因是,如果可能的话,我想保留在网络应用程序中吗?我已经使用了carrierwave和paperclip,但我正在寻找能够恢复的东西,因为上传5Gb文件可能需要一些时间!
在我列出的这些方法中,我想说明哪些方法运作良好,如果还有其他方法可能会丢失?如果可能的话,没有插件,宁愿不使用Java Applets或Flash.另一个问题是这些解决方案在上传时将文件保存在内存中,这也是我希望尽可能避免的约束.
我开始探索使用p2p连接与其他连接的选项,所以我在JAVA中为Android设备编写了一个简单的套接字程序,其中用户可以共享简单的消息p2p(我当时对NAT没有任何想法).我了解了NAT,所以我现在需要与另一个用户建立TCP连接,该用户使用服务器进行发现,但有效载荷是p2p传输的.我也看了一下XMPP(协议如何工作的一个很好的和详细的说明是这里)和UPnP,但我不知道如何实现它们.
另一个有趣的问题是BitTorrent,因为它们可以在任何设备上工作,甚至可以在NAT后面工作.我无法解释BitTorrent的工作原理.
我研究了很多,但我被卡住了.
我的问题是:
如何编写一个简单的bittorrent应用程序.像使用bittorrent库的"hello world",我的意思是最简单的应用程序来理解bittorrent的工作.我更喜欢python或C/C++实现,但它可以是任何语言.平台也不是问题,但我更喜欢Linux.
关于图书馆的建议,我已经从http://sourceforge.net/projects/bittorrent/develop下载了一个(我认为官方bittorrent)的源代码 .但是,我在http://en.wikipedia.org/wiki/Comparison_of_BitTorrent_clients#Libraries上看到了很多其他库.我很感激有关这方面的建议.
如果只有一台笔记本电脑,如何测试应用程序.
bittorrent ×10
p2p ×2
c ×1
cocoa ×1
dht ×1
html ×1
html5 ×1
http ×1
java ×1
javascript ×1
laravel ×1
laravel-5 ×1
magnet-uri ×1
nat ×1
networking ×1
objective-c ×1
php ×1
protocols ×1
python ×1
websocket ×1