我正在通过此spec使用Java实现BitTorent协议。在消息部分中,除2个外,所有消息都是固定长度的;对于其中的一个来说,它是握手后唯一的变量消息,所以我可以检查其他人,并在没有其他消息遇到时认为它是一条消息。但是,对于下面的消息解析可变长度消息
bitfield: <len=0001+X><id=5><bitfield>
位域消息可以仅紧接在信号交换序列完成之后发送的,和任何其它消息发送之前。它是可选的,并且如果客户端没有分片,则不需要发送。
位字段消息是可变长度,其中X是位字段的长度。有效载荷是表示已成功下载的部分的位字段。第一个字节的高位对应片段索引0.清除的位表示缺失的片段,并且设置位指示有效且可用的片段。末尾的备用位设置为零。
错误长度的位域被视为错误。如果客户端接收到的字段大小不正确,或者位字段中有任何空闲位被设置,则客户端应该放弃连接。
我不能想出解析它的方法,如果我不知道长度;我应该如何在一个字节流中找到id?
编辑:在位字段消息的有效载荷中,每个作品在torrent文件中为0或1,消息的长度将根据torrent内容的大小而改变。所以我不认为我可以假设件数始终适合5个字节的数字。
请标点符号! – JesperE 2009-06-22 21:42:06
嘿,他在那里有一个分号! – skaffman 2009-06-22 21:46:06
我把那个分号放在那里。 :P – 2009-06-22 21:47:53