bencode

这个东东在实现通信协议的扩展性上可以相当的灵活,由于协议是自描述的,完全可以通过自扩展实现更丰富的类型定义;

在不追求性能、在多语言间的兼容还是有利用的价值。

 

更高效的协议可以考虑google的protocolbuf。

 

转一下wiki上的连接http://wiki.theory.org/BitTorrentSpecification,这里可以找到很多现成的实现。

 

另一位仁兄的博文

 

 

BitTorrent 用在传输数据结构的编码方式。这种编码方式支持四种数据:

字符串 (Byte String)
整数 (Int)
线性表 (List)
字典表 (Dictionary)
Bencode 最常被用在 .torrent 档中,档案里的元数据都是 Bencode 过的字典表。

Bencode其实非常简单,它就是定义了一套用字符串来表示这四种信息的规则。


字符串 Byte String
  字符串用最常见的方法,即 字符串长度:字符串数据。但是这个字符串长度是用ASCII编码,而不是把四个字节表示的Int写正在这里,比如 "10:abcdefghij"表示字符串"abcdefghij"。涉及中文时,用UTF-8编码方式。

整数 Int
  整数表示方法是,i  整数的ASCII编码 e  。这里用i表示起始标志,用e表示结束标志。可以表示负数,比如 "i-5e"就表示-5。其中“整数的ASCII编码”除了0外,其它的不能以0开始。比如"i07e"就非法,但是"i0e"就是可以的。

  表示的整数不要超过32 Bit。

线性表 List
  线性表的表示方法是,l  (Bencode数据)* e  。值得注意的是,List中每一项是Bencode的数据,所以List是可以嵌套的。比如 "l3:abc4:abcdl3:def4:1234ee"表示的是一个List中有"abc","abcd"和List2,List2中有"def", "1234"。

字典表 Dictionary
  字典表的表示方法是,d ((Bencode字符串key)(Bencode数据value))* e  。字典表中每一项的前面的key必须是Bencode字符串,后面的value则可以是Bencode的四种数据中任意一种。比如 "d3:abc4:abcd3:defl3:abc:4:abcdee"就表示字典中有两项,第一项key="abc", value="abcd",第二项的key="def",value则是一个List,List中有"abc", "abcd"。


本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/gxllang83/archive/2008/08/27/2838093.aspx

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值