问题标签 [peer-wire-protocol]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
3098 浏览

java - 用 Java 实现的 Bittorrent Peer Wire 协议

我有几个关于 Bittorrent Peer Wire 协议的问题。我正在尝试使用此规范在 Java 中实现它。

在 Peer Wire Protocol 部分中,它说所有整数都是四字节大端值。AFAIK java使用大端。这是否意味着说如果我想发送窒息消息

扼流圈:<len=0001><id=0>

我只是写到sokcet 1,然后写0吗?

至于我的第二个问题。当请求一块时,我认为多个文件是一个大的连续文件吗?还是考虑单个文件?因为片段长度不会与文件对齐​​,所以一个索引可以同时包含一个文件的结尾和另一个文件的开头?

至于我的最后一个问题,当我打开与对等方的连接并发送我的握手时,我是继续请求片段还是请求然后等待一段时间,看看它是否会向我们请求一些东西?谈话是如何进行的?我主要完成了 http 类型的网络编程,我要求一些东西等待响应。但如果我一直要求件,我将如何发送件?

0 投票
7 回答
2228 浏览

java - Java 线程性能

我正在开发一个 bittorrent 客户端。在与同行交流时,我与他们交流的最简单方法是为每个人生成一个新线程。但是,如果用户想与大量对等点保持连接,我会导致我产生大量线程。

我想到的另一种解决方案是让一个线程遍历对等对象并运行它们一段时间。

我主要在 ruby​​ 中检查了其他库(我的是在 java 中),它们为每个新对等点生成一个线程。如果用户将连接数设置为 100 或 200 之类的高数字,您认为生成一个线程会降低性能吗?

0 投票
1 回答
1076 浏览

algorithm - 确定最快的 BitTorrent 对等连接

如何确定您连接的哪个对等方具有最快的连接(上传速率)?

对等点的实际连接是否决定了谁是最快的,或者需要最多块的对等点会导致他上传最快,因为从他那里下载的人越来越少?

我想编写一个算法,该算法采用从跟踪器返回的对等列表中的所有对等点,并使用 ping 和计时响应或其他方式确定哪些对等点更接近。

谢谢

0 投票
2 回答
98 浏览

java - 对允许通过 HTTP 发送对象的 Wire 协议进行建模,如应用层协议

以下是我需要构建的一种系统(一个小原型)。

“构建一个简单的中间件系统。它允许将服务动态添加到系统中,并允许从客户端程序访问服务。系统将包括用于构建服务器骨架和客户端存根的简单实用程序。用 Java 编写;服务器端使用servlet API部署在Tomcat中,客户端只使用基本的socket API,不使用其他库。所有处理都应该使用基本的语言结构。定义一个OOPs启用的有线协议,基于该系统是待实现。应该支持定义对象结构定义。

我需要做出的重要设计决策是:“我应该如何设计能够发送对象的有线协议,而不仅仅是预置数据类型,我的意思是它应该包括什么?”

我发现 CORBA(https://en.wikipedia.org/wiki/Common_Object_Request_Broker_Architecture)作为很好的参考。如果有人能解释它如何编组参数以及它以哪种格式发送数据(一个例子)就可以完成这项工作。

谢谢。

0 投票
1 回答
94 浏览

sockets - 对等线协议 - 长度为 255 和 id 为 255 的消息

我正在研究 BitTorrent peer-wire-protocol 的实现。我被我的实施问题阻止了。它正确解析消息,直到被长度为 255 和 id 为 255 的消息停止。下面是从对等方接收到的原始数据的转储。我相信错误消息位于偏移量 0x3ff,它首先解析 len = 0x00FF 和 id=0xFF。

我的实现只处理由 BitTorrent 协议指定的长度前缀和 id 的消息,并相应地处理套接字数据。

在从套接字解析数据时,我在 BitTorrent 规范中没有看到任何关于处理任何其他类型的消息或数据的内容。但是,我尝试我的客户端的每个对等方都收到了这种数据,即无法解析长度为 0x00FF 或 0xFFFF 的消息,比我预期的要多得多,并且都以字节 0x0a 结尾。我的对等线协议实施还需要什么?

0 投票
0 回答
1020 浏览

mongodb - MongoDB 客户端/服务器连接中的 TCP/IP 套接字如何工作?

根据Mongo Wire Protocol的文档:

客户端应使用常规 TCP/IP 套接字连接到数据库。没有连接握手。

这听起来让我很困惑。客户端使用常规 TCP/IP 套接字连接到服务器。在这种情况下,没有三次握手怎么能建立连接呢?我错过了什么重要的东西吗?

感谢您提前发表任何评论!

0 投票
1 回答
81 浏览

node.js - Node js peerwire 协议实现

在实现 Bittorrent 协议时,与对等方通信并获取一些传入对等方消息时遇到问题:此类消息的缓冲区包含大约 200 个“255”值,然后是大约 200 个随机数。问题是我在此类有效负载的规范定义中找不到。缓冲区中第一个或第四个字节描述的消息类型,在我的情况下它们都等于 255,并且没有这种类型的消息(可用类型有:1-8、16、21-23)

缓冲区的数组表示: