c语言bt下载程序,用C语言开发一个BT下载软件(一) ------ BitTorrent协议 -1
BitTorrent(简称BT)是一个文件分发协议,每个下载者在下载的同时不断地向其他下载者上传已下载的数据。它是属于一个应用层的协议。
基于BT协议的文件分发系统由以下几个实体构成:
一个web服务器
一个种子文件
一个Tracker服务器
一个原始文件提供者
一个网络浏览器
若干个下载者
web服务器上保存着种子文件。种子文件又称为元文件或metafile,它保存了被共享文件的一些信息,如文件名、大小、Tracker服务器地址,种子文件以.torrent为后缀。Tracker服务器保存着当前下载某共享文件的所有下载者的IP和端口。原始文件提供者提供完整的共享文件供其他下载者下载。种子文件就是提供者使用BT客户端生成的。每个下载者通过运行BT客户端软件下载共享文件。某个下载者本身称为客户端,其他下载者称为peer。
下载过程:客户端首先解析种子文件,从中获取待下载的共享文件的一些信息,包括Tracker服务器地址。然后客户端连接Tracker获取当前下载该文件的所有下载者的IP和端口。之后客户端根据IP和端口连接其他下载者,从它们那里下载文件,同时把自己已下载的部分提供给其他下载者下载。
共享文件在逻辑上被划分为大小相同的块,称为piece,每个piece通常为256KB。实际使用中,每个piece又被划分为大小相同的slice,每个slice固定为16KB。peer之间每次传输以slice为单位。种子文件中包含有每个piece的hash值。BT协议规定使用Sha1算法对每个piece生成20字节的hash值,作为每个piece的指纹。每当客户端下载完一个piece时,即对该piece使用Sha1算法计算其hash值,并与种子文件中保存的该piece的hash值进行比较,如果一致即表明下载了一个完整而正确的piece。一旦某个piece被下载,该piece即可提供给其他peer下载。
待开发的BT客户端应包含以下功能:
解析种子文件以获取待下载文件的信息
连接Tracker服务器获取peer的IP和端口
连接peer进行数据上传和下载
对要发布的共享文件制作和生成种子文件
种子文件和Tracker的返回信息都用一种简单而高效的编码方式进行编码,称为B编码。Tracker本身作为一个web服务器,客户端与Tracker交换信息基于HTTP协议。客户端与其他peer采用面向连接的可靠传输协议TCP进行通信。
B编码
B编码有4种类型:字符串、整型、列表、字典。
字符串的编码格式::,例如字符串spam,经过B编码后为:4:spam。
整型的编码格式:ie,例如整数3,-3和0的B编码分别为:i3e,i-3e,i0e。
列表的编码格式:le,例如列表l4:spam4eggse表示两个字符串,一个是spam,一个是eggs。
字典的编码格式:de,关键字是一个经过B编码的字符串,值可以是任何合法的B编码类型。d和e之间可以出现多个关键字和值对。例如d4:spaml3:aaa3:bbbee是一个字典,关键字是spam,值是一个列表,列表中有2个字符串aaa和bbb。
种子文件的结构
种子文件就是一个B编码的字典。包含以下关键字。
关键字
含义
info
对应的值是一个字典,它有2种模式,“single file”和"multiple file",单文件模式是指待共享文件只有一个,多文件模式是待共享的文件不止1个。比如一部分电影分上下部2个文件。
announce
值为Tracker的URL
announce-list
可选,存放的是备用Tracker的URL
info是最重要的关键字,它的值是一个字典,无论是单文件模式还是多文件模式,该字典都包含以下关键字:
关键字
含义
piece length
每个piece的长度,通常为i252144e,即256K
pieces
对应的值为一个字符串,它存放的是各个piece的hash值,该字符串的长度是20的倍数,因为每个piece的hash值的长度都是20字节
对于单文件模式,info的值还包括以下关键字:
name:共享文件的文件名
lengtth:共享文件的长度
对于多文件模式,info的值还包括以下关键词:
name:存放所有共享文件的文件夹名
files:它的值是一个列表,列表中包含多个字典,一个字典对应着一个共享的文件。此字典中又包含以下关键字 (1)path:共享文件的路径和文件名
(2)length:共享文件的长度
c语言bt下载程序,用C语言开发一个BT下载软件(一) ------ BitTorrent协议 -1相关推荐
- c语言编写数据存储的游戏,c语言经典小程序和c语言编写的小游戏带注释(自动保存的).doc...
c语言经典小程序和c语言编写的小游戏带注释(自动保存的) 1.写一个定时?关机的小程?序,可以立即关?闭计算机,也可以一段?时间后关闭?计算机. #inclu?de #inclu?de #inclu? ...
- 通俗易懂【Springboot】 单文件下载和批量下载(多个文件合成一个压缩包下载)
文章目录 一.单文件下载 1.简单理解文件下载 2.单文件下载的具体代码实现 3.测试 4.单文件下载整体代码 二.多文件批量下载(多个文件合成一个压缩包下载) 1.多文件下载的实现方式,这里使用了Z ...
- c语言考试系统程序,二级c语言模拟考试软件下载
无忧考吧二级c语言考试系统是一款非常专业的计算机二级C语言模拟考试软件,可以帮助用户朋友们对全国计算机二级C语言考试进行模拟测试学习,如果您对这一门课程并没有什么把握需要练习,这款考试模拟系统一定是你 ...
- c语言程序阅读题库,C语言程序设计-阅读程序题库及答案.doc-资源下载在线文库www.lddoc.cn...
C语言程序设计-------阅读程序题库及答案.doc 阅读程序题 2 1 以下程序的输出结果是 main D float a a 1 100000000 printf g a A 0 00000e ...
- 用C语言开发一个BT下载软件(一) ------ BitTorrent协议 -1
BitTorrent(简称BT)是一个文件分发协议,每个下载者在下载的同时不断地向其他下载者上传已下载的数据.它是属于一个应用层的协议. 基于BT协议的文件分发系统由以下几个实体构成: 一个web服务 ...
- 用C语言开发一个BT下载软件 (二) ------ 算法和策略
流水线作业 当客户端向peer发送数据请求时(即发送request消息),一次请求多个slice(即在一个数据包中发送多个request消息请求多个slice).peer发送完一个slice后接着发送 ...
- 科学出版社c语言实验答案,程序设计基础c语言第三章程序结构教材习题答案科学出版社...
第 1 页程序设计基础-C 语言(科学出版社教材)第三章-程序结构教材习题答案1.0 编写程序使整形变量:a=3,b=4,c=5,p=0xfffe,q=0xffff;浮点型变量:x=1.2,y=2.4 ...
- 电大java语言与面向对象程序设计基础_6406Java语言与面向对象程序设计基础A卷...
6406Java语言与面向对象程序设计基础A卷 试卷编号:6406 座位号 浙江广播电视大学2006年春季学期开放教育专科期末考试 <Java语言与面向对象程序设计基础>试题 2006年7 ...
- c程序设计语言 qsort,【程序设计基础_C语言】北理工的恶龙(附qsort范例)
[程序设计基础_C语言]北理工的恶龙(附qsort实例) 北理工的恶龙(附qsort实例) 背景:最近,北理工出现了一只恶龙,它长着很多 头,而且还会吐火,它将会把北理工烧成废墟, 于是,校长下令召集 ...
最新文章
- java 组合框_Java知多少(88)列表和组合框
- Pandas获取数据列名称的列表(list):(column list)
- 文轩在线:如何让IT部门成为企业的价值中心
- 本周技术主题-----.net中的资源文件
- python基础教程:list转换range()的打印结果
- 前端之JQuery(二)
- spring boot 字体文件等静态资源无法获取
- oracle备份集注册,OracleRMAN将备份集重新注册到控制文件说明
- Java学习笔记7-2——注解与反射
- 12、(12.4.2)保护模式下数据段和栈段保护
- Erlang --- gen_server
- 【Vegas2006】8月24日-花豆擀面做法
- 玩转vim之vim插件Ctags
- 三酷猫学python_python学习第6期
- java web项目_一个完整JavaWeb项目开发总结
- Android播放音乐的代码,android源代码(完整的音乐播放器)
- 多懂点SQL可以写出更好的接口
- 都有云技术了,传统动态vps还有什么用?
- 关于SBUF读两次的问题
- 使用MDK创建stm32 库函数工程简单教程