`
tiantian911
  • 浏览: 224777 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Bittorrent的编码模块的ruby代码

阅读更多
最近看了看bt的源码,随手写了些ruby的代码:
def encode(x)
  case x.class.to_s
  when "Float"
    encode_num(x)
  when "Fixnum"
    encode_num(x)
  when "Bignum"
    encode_num(x)
  when "String"
    encode_string(x)
  when "Array"
    encode_list(x)
  when "Hash"
    encode_hash(x)
  else
    "unknown"    
  end
end
def encode_num(x)
  "i#{x.to_s}e"
end
def encode_string(x)
  "#{x.size}:#{x}"
end
def encode_list(x)
  str="l"
  x.each do |temp|
    str+=encode(temp)
  end
  str+="e"
end
def encode_hash(x)
  str="d"
  x.each do |key,val|
    str+=encode(key)
    str+=encode(val)    
  end
  str+="e"
end
puts encode("abcd")             # returns "4:abcd"
puts encode(1000)               # returns "i1000e"
puts encode([1,2,3])            # returns "li1ei2ei3ee"
puts encode({"key" => "value"}) # returns "d3:key5:valuee"


def decode(io)
  c = io.getc
  case c.chr
  when 'i'
    i = ''
    while c = io.getc
      if c.chr == 'e'
        if i.match(/^(0|-?[1-9][0-9]*)$/)
          return i.to_i
        end
      else
        i += c.chr
      end
    end
  when '0'..'9'
    n = c.chr
    while b = io.getc
      case b.chr
      when '0'..'9'
        n += b.chr
      when ':'
        strlen = n.to_i
        str = io.read(strlen)
        if str.length == strlen
          return str
        end
      end
    end
  when 'l'
    list = []
    while item = decode(io)
      list.push(item)
    end
    return list
  when 'd'
    dict = {}
    while key = decode(io)
      val = decode(io)
      dict[key] = val
    end
    return dict
  when 'e'
    return false
  end
end
puts decode(StringIO.new("4:abcd"))
puts decode(StringIO.new("i1000e"))
puts decode(StringIO.new("li1ei2ei3ee"))
puts decode(StringIO.new("d3:key5:valuee"))

分享到:
评论

相关推荐

    BitTorrent软件的源代码

    BitTorrent软件的源代码是实现这一协议的程序代码,它揭示了软件的工作原理、功能实现和优化策略。 源代码是程序员用编程语言编写的原始指令集合,它是软件开发的基础。对于BitTorrent软件而言,源代码包含了客户端...

    BitTorrent的源代码

    源代码是软件开发的基础,对于BitTorrent的源代码,即使不完全理解其内部机制,也可以从中学习到许多编程技巧和设计模式。对于开发者而言,研究BitTorrent的源代码可以深入了解P2P网络的工作原理,如何处理数据传输...

    著名的BT下载软件BitTorrent的源代码

    标题提到的"著名的BT下载软件BitTorrent的源代码"是指BitTorrent客户端的原始编程代码,它通常用C++这种强大的编程语言编写。开发者和学习者可以通过研究源代码来理解其内部工作原理,包括如何建立和维护P2P网络、...

    BitTorrent源代码

    BitTorrent源代码,python代码,供研究学习之用,呵呵

    686234著名的BT下载软件BitTorrent的源代码

    标题提到的"686234著名的BT下载软件BitTorrent的源代码"指的是BitTorrent客户端的源代码,这为开发者提供了一个深入理解其工作原理以及进行二次开发的机会。 BitTorrent的工作机制主要包括以下几个关键知识点: 1....

    Bittorrent DHT源代码

    DHT Bittorrent sourcecode

    BitTorrent v4.0.1 源代码

    BitTorrent(简称BT,俗称BT下载、变态下载)是一个多点下载的源码公开的P2P软件,使用非常方便,就像一个浏览器插件,很适合新发布的热门下载。其特点简单的说就是:下载的人越多,速度越快。 更新如下: 1、...

    著名的BT下载软件BitTorrent的源代码(c++版本)

    这个协议的实现之一就是BitTorrent软件,其源代码主要由C++编写。 在C++版本的BitTorrent源代码中,我们可以深入理解以下几个关键知识点: 1. **对等网络(P2P)架构**:BitTorrent是基于P2P架构的,每个参与者...

    BitTorrent源码+开发文档

    3. **功能模块**:逐一介绍客户端的各个组件,如连接管理、文件分块、磁力链接解析、DHT网络的实现等。 4. **API参考**:提供给开发者用于构建自己的BitTorrent客户端的接口和函数说明,包括如何添加新种子、处理...

    BitTorrent

    BitTorrent BitTorrent BitTorrent BitTorrent

    BitTorrent3.3源码.zip

    Python源代码是BitTorrent3.3实现的基础,Python是一种高级编程语言,以其简洁的语法和强大的库支持而闻名。在BitTorrent3.3中,Python被用来编写客户端程序,这使得开发过程更加灵活且易于理解。开发者可以轻松地...

    BitTorrent-4.4.0 python源码包

    2. **Bencoding 解码器/编码器**:Bencoding 是 BitTorrent 使用的一种数据表示方式,用于在 .torrent 文件和客户端之间交换元数据。 3. **网络连接管理**:Python 中可能使用了套接字编程来处理网络连接,包括 TCP...

    BitTorrent-5.0.9.zip

    源代码中会有实现这些策略的模块,如 choking 和 unchoking算法。 7. **User Interface**:客户端通常有一个图形用户界面(GUI),让用户可以浏览可用的种子,启动和暂停下载,以及管理设置。BitTorrent-5.0.9的...

    BitTorrent source

    2. **Bencoding**:BitTorrent 使用 Bencoding 进行数据编码,这是一种类似于 JSON 的二进制编码方式,用于存储元数据如.torrent 文件。Bencoding 包含字典、列表、整数和字符串四种数据类型,是解析 .torrent 文件...

    BitTorrent 最新相关官方文档

    BitTorrent是一种去中心化的文件分发协议,由Bram Cohen创建,旨在高效地分享大量数据,如电影、软件和其他大文件。BitTorrent Enhancement Proposals(BEPs)是该协议的标准化过程,类似于Python Enhancement ...

    Bittorrent-4.0.3源码

    Bittorrent-4.0.3源码

Global site tag (gtag.js) - Google Analytics