【发布时间】:2009-06-02 05:55:06
【问题描述】:
对于我的一个项目,我正在尝试实现 BitTorrent 协议的一小部分,可以在 here 找到。具体来说,我想使用它的“Bencoding”部分,这是一种安全编码数据以通过套接字传输的方法。格式如下:
8:a string => "a string"
i1234e => 1234
l1:a1:be => ['a', 'b']
d1:a1:b3:one3:twoe => {'a':'b', 'one':two}
编码部分很简单,但解码变得相当麻烦。例如,如果我有一个字符串列表,我无法将它们分成单独的字符串。我尝试了几种不同的解决方案,包括PyParsing 和自定义令牌解析器。我目前正在尝试使用正则表达式,它似乎进展顺利,但我仍然挂断字符串问题。我目前的正则表达式是:
(?P<length>\d+):(?P<contents>.{\1})
但是,我似乎无法将第一组用作第二组的长度。有什么好的方法可以做到这一点吗?还是我在处理这一切时都错了,而答案就在我面前?
【问题讨论】:
-
不确定答案,但原始的 Bit Torrent 客户端是开源的。它甚至在 Python 中!所以你可以试试看:bittorrent.cvs.sourceforge.net/viewvc/bittorrent/BitTorrent
-
"现在你有两个问题!" ::rimshot::
-
感谢您的链接,MatrixFrog。我想我将只导入该文件,并在我的程序中使用原始实现。