这个东东在实现通信协议的扩展性上可以相当的灵活,由于协议是自描述的,完全可以通过自扩展实现更丰富的类型定义;
在不追求性能、在多语言间的兼容还是有利用的价值。
更高效的协议可以考虑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