标签: bittorrent

'松散'通过压缩继承树来输入C#

我想问的问题是:

是从一个可抽象的类,甚至是一个好的东西,从一个抽象类内部下来继承树(即,朝着一个更特殊的类),或者它总是一个可怜的选择,有更好的选择?

现在,举例说明为什么我认为它可以用得很好.

我最近在C#中使用BitTorrent协议实现了Bencoding.一个简单的问题,如何表示数据.我选择这样做,

我们有一个abstract BItem类,它提供了一些基本功能,包括static BItem Decode(string)用于将Bencoded字符串解码为必要结构的类.

还有四个派生类BString,BInteger,BListBDictionary,表示待编码的四个不同的数据类型.现在,这是棘手的部分.BList并且分别BDictionary具有this[int]this[string]访问器以允许访问这些数据类型的类似阵列的质量.

潜在的可怕部分现在即将到来:

BDictionary torrent = (BDictionary) BItem.DecodeFile("my.torrent");
int filelength = (BInteger)((BDictionary)((BList)((BDictionary)
             torrent["info"])["files"])[0])["length"];
Run Code Online (Sandbox Code Playgroud)

嗯,你得到的照片......哎呀,这对眼睛很难,更不用说大脑了.所以,我在抽象类中引入了一些额外的东西:

public BItem this[int index]
{
    get { return ((BList)this)[index]; }
}
public BItem this[string index]
{
    get { return ((BDictionary)this)[index]; }
}
Run Code Online (Sandbox Code Playgroud)

现在我们可以将旧代码重写为:

BDictionary torrent = (BDictionary)BItem.DecodeFile("my.torrent");
int filelength = (BInteger)torrent["info"]["files"][0]["length"];
Run Code Online (Sandbox Code Playgroud)

哇,嘿presto,更多可读代码.但是,我是否只是将我的灵魂的一部分用于将子类的知识隐含在抽象类中?

编辑:为了回应一些答案,你完全偏离了这个特定的问题,因为结构是可变的,例如我的例子torrent["info"]["files"][0]["length"]是有效的,但同样如此 …

c# inheritance bittorrent data-structures

5
推荐指数
1
解决办法
1493
查看次数

你如何建立一个torrent文件索引器?

我对像torrentz.com这样的搜索引擎背后的技术感到好奇.根据我的观察,它不会托管任何torrent文件,而是将您连接到其他服务器.

  • 您搜索关键字,它会显示与您的搜索匹配的潜在标题列表.
  • 然后你选择其中一个,它为你提供托管相应的torrent文件的潜在服务器的另一个列表.

我特别感兴趣的是收集和索引所有内容背后的策略:

他们如何收集然后汇总数据?
它是一个提交基础服务,其中每个服务器都提交其内容以进行索引吗?
它是一种爬行算法吗?如果是这样,你怎么开始爬网像piratebay.org?
他们是否可以访问这些其他服务器的数据库?

我对bittorrent协议的了解和理解不是很精细,但我在网上找到的文档更多地指向了构建跟踪服务所涉及的过程,这不是我感兴趣的.任何见解和推荐的阅读材料表示赞赏.

bittorrent search-engine

5
推荐指数
1
解决办法
2438
查看次数

如何从洪流追踪器获得同伴

我怎样才能从跟踪器获得洪流同行.....说我有

hash value 76a36f1d11c72eb5663eeb4cf31e351321efa3a3
Run Code Online (Sandbox Code Playgroud)

和跟踪器info as http://tracker.openbittorrent.com/announce ,我如何才能获得同龄人

php java bittorrent

5
推荐指数
1
解决办法
2388
查看次数

解析torrent文件 - 哈希信息.(二郎)

我正在尝试提供正确的url编码信息哈希发送到跟踪器以获取对等列表.

为了测试,我尝试在这个URL中解析torrent .

打开文件后,手动剪切信息字典片段和SHA1-hash它的值我得到这个二进制值:

<< 84,124,15,255,155,171,156,168,91,46,204,24,249,116,110,139,202,167,163,54 >>

从后一个二进制值检索的ASCII字符串是788f590f28a799cc1009a9b780b649fd6f0a2e91,它与站点中提到的值相同.

所以我们假设到现在为止一切都是正确的(不是吗?).

在使用下面的url-encoding函数对二进制值进行编码后,得到T%7c%0f%ff%9b%ab%9c%a8%5b.%cc%18​​%f9tn%8b%ca%a7%a36,这不是甚至接近我应发送给跟踪器的正确urlencoded值.(当我将此信息发送给跟踪器时,我收到一条未找到的错误消息,此外,它与我使用wireshark看到的值不匹配,即x%8fY%0f%28%a7%99%cc%10%09%a9 %b7%80%b6I%fdo%0a.%91).

我正在使用的URL编码功能:

encode(<<Bin:20/binary-unit:8>>)->
    %io:format("~p~n", [binary_to_list(Bin)]),
    encode(binary_to_list(Bin));
encode(List) -> do_encode(List).

do_encode([])-> [];
do_encode([H|T]) when H>=$a, H=<$z ->
    [H| encode(T)];
do_encode([H|T]) when H>=$A, H=<$Z ->
    [H| encode(T)];
do_encode([H|T]) when H>=$0, H=<$9 ->
    [H| encode(T)];
do_encode([H|T]) when H==$- ->
    [H| encode(T)];
do_encode([H|T]) when H==$. ->
    [H|do_encode(T)];
do_encode([H|T]) when H==$* ->
    [H|do_encode(T)];
do_encode([H|T]) ->
     to_hex(H) ++ encode(T).

hex(N) when N < 10 ->
    $0+N;
hex(N) when N >= 10, N < 16 …
Run Code Online (Sandbox Code Playgroud)

erlang bittorrent info-hash

5
推荐指数
1
解决办法
1638
查看次数

从红宝石种子文件中提取哈希

我希望提取种子文件的哈希标识符。

特别是,我正在寻找打开torrent信息对话时在Transmission / uTorrent中显示的相同哈希(看起来像是:7b435a6f051dec092a6ee440d793bfed6696cfa1)

认为这是种子文件中信息词典中的SHA1哈希。如果我要从一个字节到另一个字节解析二进制文件数据,那么执行SHA1哈希加密就可以了。

有谁对它有更好的理解或有一些代码可以做到这一点?

ruby hash bittorrent

5
推荐指数
1
解决办法
2146
查看次数

用于C++的Torrent库,Windows

我正在寻找一个允许我的C++应用程序(在Windows中运行)下载种子的库.但是,我不能在那里找到任何东西.

有人可以指点我正确的方向吗?

提前致谢.

c++ windows p2p bittorrent

5
推荐指数
1
解决办法
7238
查看次数

Express/torrent-stream:从流写入文件,使用url向客户端发送套接字但客户端无法找到文件

我正在开发一个个人项目,基本上需要一个磁铁链接,开始下载文件,然后在浏览器中显示洪流中的视频.我正在使用名为torrent-stream的npm模块来完成大部分工作.一旦我创建了可读流并开始编写文件,我想通过视频URL向客户端发送套接字消息,以便客户端可以呈现html5视频元素并开始流式传输视频.

我遇到的问题是,一旦客户端呈现视频元素并尝试查找源mp4,我就会在视频文件中找不到404错误.对此的任何建议都将受到高度赞赏.:)

控制器功能:

uploadVideo: function (req, res) {
    var torrentStream = require('torrent-stream');
    var mkdirp = require('mkdirp');

    var rootPath = process.cwd();
    var magnetLink = req.param('magnet_link');
    var fs = require('fs');
    var engine = torrentStream(magnetLink);

    engine.on('ready', function() {
        engine.files.forEach(function(file) {
            var fileName = file.name;
            var filePath = file.path;
            console.log(fileName + ' - ' + filePath);
            var stream = file.createReadStream();

            mkdirp(rootPath + '/assets/videos/' + fileName, function (err) {
                if (err) {
                    console.log(err);
                } else {
                    var videoPath = rootPath + '/assets/videos/' + fileName + …
Run Code Online (Sandbox Code Playgroud)

sockets video bittorrent node.js express

5
推荐指数
1
解决办法
1499
查看次数

传输torrent客户端顺序下载

我正在使用TransmissionBT torrent客户端(http://www.transmissionbt.com/)。

是否可以对代码进行简单修改,以便能够以顺序模式(从文件开头)下载文件。这样就可以播放视频文件,而无需等待下载完整个文件。我找到了解决方案-https://trac.transmissionbt.com/wiki/Can%20I%20sequence%20the%20files%20I%20download,但这是7年前的版本,在当前版本中,链接中未提及功能。

bittorrent transmission torrent transmission-daemon

5
推荐指数
2
解决办法
5027
查看次数

是否有可能只用aria2播种?

我使用英特尔计算棒构建了一个小工具(IoT),它下载了一个种子内容然后播种.

它有效.

现在我想在重新启动后播放我已下载的文件,而无需重新下载它们(原因很明显......)

没有办法在aria2上使用任何选项(这里是文档),我想知道我能做的技巧或任何其他可以做到的COMMAND LINE应用程序吗?

bittorrent seeding aria2 torrent

5
推荐指数
2
解决办法
2431
查看次数

如何获得对ut_metadata piece请求的响应?(node.js Bit Torrent BEP 0009)

我正在使用Node.js构建一个Bittorrent客户端,并且无法通过PWP元数据扩展(BEP 0009)从对等方获得答案

我从DHT(BEP 0005)(我宣布的地方)获得同行,然后使用网络套接字在PWP上发送握手和扩展握手.

buildHandshake = (torrent, ext) => { // torrent contains mainly infoHash
    const buf = Buffer.alloc(68)
    buf.writeUInt8(19, 0)
    buf.write('BitTorrent protocol', 1)
    if (ext) {
        const big = new Uint64BE(1048576)
        big.toBuffer().copy(buf, 20)
    } else {
        buf.writeUInt32BE(0, 20)
        buf.writeUInt32BE(0, 24)
    }
    torrent.infoHashBuffer.copy(buf, 28)
    anon.nodeId().copy(buf, 48) // tool that generates a nodeId once.
    return buf
}

buildExtRequest = (id, msg) => {
    const size = msg.length + 1
    const buf = Buffer.alloc(size + 5)
    buf.writeUInt32BE(size, 0) …
Run Code Online (Sandbox Code Playgroud)

javascript bittorrent protocols node.js torrent

5
推荐指数
1
解决办法
307
查看次数