当前位置: 首页 > news >正文

基于Python socket库构建的基于 P2P 的文件共享系统示例

基于 P2P 的文件共享系统

实现方式:

使用 Python 的socket库构建 P2P 网络,节点之间通过 TCP 或 UDP 协议进行通信。每个节点维护一个文件列表,并向其他节点广播自己拥有的文件信息。当一个节点需要某个文件时,它会向网络中的其他节点发送查询请求,拥有该文件的节点响应并提供文件传输服务。可以利用分布式哈希表(DHT)算法,如bittorrent中使用的 Kademlia 算法,来更高效地定位文件所在节点。

代码示例

简单模拟 P2P 文件共享中节点间文件查询功能

import socket
import threading


class P2PNode:
    def __init__(self, host, port):
        self.host = host
        self.port = port
        self.files = []
        self.peer_list = []
        self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
        self.sock.bind((self.host, self.port))
        self.receive_thread = threading.Thread(target=self.receive_messages)
        self.receive_thread.start()

    def share_file(self, file_name):
        self.files.append(file_name)
        self.broadcast_file_list()

    def broadcast_file_list(self):
        for peer in self.peer_list:
            file_list_str = ','.join(self.files)
            self.sock.sendto(file_list_str.encode(), peer)

    def find_file(self, file_name):
        for peer in self.peer_list:
            self.sock.sendto(f'FIND {file_name}'.encode(), peer)

    def receive_messages(self):
        while True:
            data, addr = self.sock.recvfrom(1024)
            message = data.decode()
            if message.startswith('FIND'):
                _, target_file = message.split()
                if target_file in self.files:
                    self.sock.sendto(f'HAVE {target_file} {self.host}:{self.port}'.encode(), addr)
            else:
                received_files = message.split(',')
                self.peer_list.append(addr)
                for file in received_files:
                    if file not in self.files:
                        self.files.append(file)


if __name__ == "__main__":
    node1 = P2PNode('127.0.0.1', 8890)
    node2 = P2PNode('127.0.0.1', 8891)
    node1.share_file('example.txt')
    node2.find_file('example.txt')

应用场景

适用于小型局域网内的文件共享,在没有中央服务器的情况下,方便用户之间直接交换文件,节省服务器成本和带宽资源。

相关文章:

  • 深入理解消息队列
  • 【TypeScript】TypeScript的应用实例
  • 重磅 | Cloud Ace 推出 GenAIOps 服务:加速企业生成式 AI 商业落地
  • wayland桌面录屏,屏幕录制,Linux屏幕录制
  • (功能测试)第五章 APP性能测试 常用的APP命令格式 补充与总结
  • React + TypeScript 数据血缘分析实战
  • DeepSeek R1 部署笔记(个人无框架部署,缓慢更新中)
  • Spring AOP 切面打印日志完整版
  • ubuntu离线安装Ollama并部署Llama3.1 70B INT4并对外发布服务
  • 鲲鹏麒麟离线安装Docker
  • 定义数组存储3部汽车对象(class2:类在class1中请看上一篇博客)
  • Everything in Python is an object. What does that mean?
  • 分类算法——逻辑回归 详解
  • 软件工程复试专业课-能力成熟度模型CMM
  • 幂等性 如何通过设计避免重复操作的影响
  • Springboot统一功能处理
  • [VMware]卸载VMware虚拟机和Linux系统ubuntu(自记录版)
  • NTS库学习,找bug中......
  • docker高级
  • AI agent(以AutoGPT为例)和AI Workflow 区别
  • 电商货源网站/今日国内新闻最新消息大事
  • 优享微信网站建设/蚂蚁bt
  • 姑苏网站制作/友情链接发布平台
  • 阿里巴巴国际站靠谱吗/百度快速查询
  • 网络科技有限公司网站建设策划书/查询网站服务器
  • 属于垂直型b2b网站的有/seo优化软件