File(include big files) share system based on python.
实现了P2P分布式文件共享系统,方便用户之间完成完整的去中心化文件传输,包括文本,音乐,视频等等。用户节点即是资源提供者,又是资源获取者,节点与可信其他节点互联,避免C/S架构下的文件共享系统容易被封杀的问题。
本系统有如下几个特点:对用户的权限控制,凭借泛洪查询功能,获取文件目标资源。底层采用socket编程实现主机间通信。基于xml的远程过程调用完成查询,广播,以及文件传输功能。实现了对文件传输的优化,能够支持大文件的分布式传输。
- 客户端通过Md5生成密钥,用来作为与服务器通信的唯一凭证。
- 主机探测活跃节点,加载已知节点列表,在查询时维护这个列表,如果探测到节点异常,则从维护的列表中删除该节点。
- 查询功能,客户端向服务器端发送查询请求,(通过fetch命令获取资源),本地服务器通过handle命令进行响应并进行查找,如果找到目标资源,则直接下载,否则向维护的列表中的活跃节点广播(broadcast函数)该请求。
- 处理响应请求:判断文件路径是否合法,判断文件是否存在,判断是否存在资源访问异常,判断请求资源是否是共享资源。
- 广播功能:过滤重复查询的请求,根据响应请求对异常进行处理,维护活跃节点列表。 6) 文件传输功能:资源节点与源节点建立连接,对文件传输进行,考虑了大文件下的传输问题。
NodeFile为各个节点的文件分享目录 将需要分享的文件放置此目录即可进行共享
url.txt 为各个节点维护的已知的可信节点列表,存储了节点连接关系
启动三个节点进行模拟
pythonw gclient.py url1.txt NodeFiles01 http://127.0.0.1:6666
pythonw gclient.py url2.txt NodeFiles02 http://127.0.0.1:7777
pythonw gclient.py url3.txt NodeFiles03 http://127.0.0.1:8888
在任意一个节点的客户端输入查询资源,点击下载即可下载到本机。
在魔力·Python的基础上完成本系统。