基于Python socket库构建的基于 P2P 的文件共享系统示例
基于 P2P 的文件共享系统
实现方式:
使用 Python 的socket库构建 P2P 网络,节点之间通过 TCP 或 UDP 协议进行通信。每个节点维护一个文件列表,并向其他节点广播自己拥有的文件信息。当一个节点需要某个文件时,它会向网络中的其他节点发送查询请求,拥有该文件的节点响应并提供文件传输服务。可以利用分布式哈希表(DHT)算法,如bittorrent中使用的 Kademlia 算法,来更高效地定位文件所在节点。
代码示例
简单模拟 P2P 文件共享中节点间文件查询功能
import socket
import threadingclass P2PNode:def __init__(self, host, port):self.host = hostself.port = portself.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')
应用场景
适用于小型局域网内的文件共享,在没有中央服务器的情况下,方便用户之间直接交换文件,节省服务器成本和带宽资源。
相关文章:
基于Python socket库构建的基于 P2P 的文件共享系统示例
基于 P2P 的文件共享系统 实现方式: 使用 Python 的socket库构建 P2P 网络,节点之间通过 TCP 或 UDP 协议进行通信。每个节点维护一个文件列表,并向其他节点广播自己拥有的文件信息。当一个节点需要某个文件时,它会向网络中的其…...
JavaScript 函数重载:灵活应对多场景的编程技巧
在 JavaScript 中,函数重载(Function Overloading)是一个常见的需求。尽管 JavaScript 本身并不支持传统意义上的函数重载(即在同一个作用域内定义多个同名函数,根据参数的不同调用不同的函数),…...
通过 PromptTemplate 生成干净的 SQL 查询语句并执行SQL查询语句
问题描述 在使用 LangChain 和 Llama 模型生成 SQL 查询时,遇到了 sqlite3.OperationalError 错误。错误信息如下: OperationalError: (sqlite3.OperationalError) near "sql SELECT Name FROM MediaType LIMIT 5; ": syntax error [SQL: …...
用大白话解释缓存Redis +MongoDB是什么有什么用怎么用
Redis和MongoDB是什么? Redis:像你家的“小冰箱”,专门存高频使用的食物(数据)。它是基于内存的键值数据库,读写速度极快(每秒超10万次操作)。比如你每次打开手机App,用…...
计算机毕业设计SpringBoot+Vue.js汽车销售网站(源码+文档+PPT+讲解)
温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 温馨提示:文末有 CSDN 平台官方提供的学长联系方式的名片! 作者简介:Java领…...
【0010】HTML水平线标签详解
如果你觉得我的文章写的不错,请关注我哟,请点赞、评论,收藏此文章,谢谢! 本文内容体系结构如下: 一、水平线标签概述 在HTML中,<hr>标签用于在网页上插入一条水平线,其主要…...
FastExcel与Reactor响应式编程深度集成技术解析
一、技术融合背景与核心价值 在2025年企业级应用开发中,大规模异步Excel处理与响应式系统架构的结合已成为技术刚需。FastExcel与Reactor的整合方案,通过以下技术协同实现突破性性能: 内存效率革命:FastExcel的流式字节操作与Re…...
Netty是如何实现零拷贝的?
大家好,我是锋哥。今天分享关于【Netty是如何实现零拷贝的?】面试题。希望对大家有帮助; Netty是如何实现零拷贝的? 1000道 互联网大厂Java工程师 精选面试题-Java资源分享网 Netty是一个高性能的Java网络应用框架,它…...
【大模型➕知识图谱】大模型结合医疗知识图谱:解锁智能辅助诊疗系统新范式
【大模型➕知识图谱】大模型结合医疗知识图谱:解锁智能辅助诊疗系统新范式 大模型结合医疗知识图谱:解锁智能辅助诊疗系统新范式引言一、系统架构1.1 系统架构图1.2 架构模块说明1.2.1 用户输入1.2.2 大模型(语义理解与意图识别)1.2.3 Agent(问题解析与任务分配)1.2.4 问…...
Spring Boot @Component注解介绍
Component 是 Spring 中的一个核心注解,用于声明一个类为 Spring 管理的组件(Bean)。它是一个通用的注解,可以用于任何层次的类(如服务层、控制器层、持久层等)。通过 Component 注解,Spring 会…...
MulFS-CAP: Multimodal Fusion-supervisedCross-modal
一种用于无注册红外-可见图像融合的单阶段框架。与传统的两阶段方法不同,MulFS-CAP结合了隐式注册和融合,简化了处理流程并增强了实用性。该方法使用共享的浅层特征编码器,同时进行特征对齐和图像融合。通过引入可学习的模态字典,…...
WordPress多语言插件GTranslate
GTranslate是一个免费的WordPress多语言插件,它允许您将网站内容翻译成多种语言。这个插件提供了一个简单易用的界面,让您可以在WordPress后台直接进行翻译操作。以下是GTranslate插件的一些主要特点: 免费使用:GTranslate插件完…...
wordpress子分类调用父分类名称和链接的3种方法
专为导航而生,在wordpress模板制作过程中常常会在做breadcrumbs导航时会用到,子分类调用父分类的名称和链接,下面这段简洁的代码,可以完美解决这个问题。 <?php echo get_category_parents( $cat, true, » ); ?…...
Prometheus + Grafana 监控
Prometheus Grafana 监控 官网介绍:Prometheus 是一个开源系统 监控和警报工具包最初由 SoundCloud 构建。自 2012 年成立以来,许多 公司和组织已经采用了 Prometheus,并且该项目具有非常 活跃的开发人员和用户社区。它现在是一个独立的开源…...
初学STM32之简单认识IO口配置(学习笔记)
在使用51单片机的时候基本上不需要额外的配置IO,不过在使用特定的IO的时候需要额外的设计外围电路,比如PO口它是没有内置上拉电阻的。因此若想P0输出高电平,它就需要外接上拉电平。(当然这不是说它输入不需要上拉电阻,…...
springboot2.7.18升级springboot3.3.0遇到的坑
druid的警告,警告如下: 运行警告2025-02-28T09:20:31.28508:00 WARN 18800 --- [ restartedMain] trationDelegate$BeanPostProcessorChecker : Bean com.alibaba.druid.spring.boot3.autoconfigure.stat.DruidSpringAopConfiguration of type [com.a…...
gtest 和 gmock讲解
Google Test(gtest)和 Google Mock(gmock)是 Google 开发的用于 C 的测试框架和模拟框架,以下是对它们的详细讲解: Google Test(gtest) 简介 Google Test 是一个用于 C 的单元测试框…...
GC垃圾回收介绍及GC算法详解
目录 引言 GC的作用域 什么是垃圾回收? 常见的GC算法 1.引用计数法 2.复制算法 3.标记清除 4.标记整理 小总结 5.分代收集算法 ps:可达性分析算法? 可达性分析的作用 可达性分析与垃圾回收算法的关系 结论 引言 在编程世界中,…...
2020 年英语(一)考研真题 笔记(更新中)
Section I Use of English(完型填空) 原题 Directions:Read the following text. Choose the best word (s) for each numbered blank and mark A, B, C or D on the ANSWER SHEET. (10 points) Even if families are less likely to si…...
【springboot】Spring 官方抛弃了 Java 8!新idea如何创建java8项目
解决idea至少创建jdk17项目 问题 idea现在只能创建最少jdk17,不能创建java8了吗?解决 问题 idea现在只能创建最少jdk17,不能创建java8了吗 我本来以为是 IDEA 版本更新导致的 Bug,开始还没在意。 直到我今天自己初始化项目时才发现&am…...
保姆级教程:在Ubuntu上为龙芯2K0300开发板配置交叉编译环境(含完整测试流程)
保姆级教程:在Ubuntu上为龙芯2K0300开发板配置交叉编译环境(含完整测试流程) 刚拿到龙芯2K0300开发板的开发者们,往往会在环境配置阶段遇到各种"拦路虎"。本文将手把手带你完成从工具链部署到"Hello World"验…...
【NOIP】1999真题解析 luogu-P1015 回文数 | GESP四、五级以上可练习
NOIP 1999 普及组真题,主要考察字符串处理、高精度加法以及任意进制的进位规则。解题的核心是将数字看作字符串处理,在循环累加中验证回文特征。适合GESP四、五级以上考生练习。题目难度⭐⭐☆☆☆,洛谷难度等级普及−。 luogu-P1015 [NOIP …...
Sigrity Aurora (II)--Advanced Impedance Analysis Techniques
1. Sigrity Aurora阻抗分析的核心价值 在高速PCB设计领域,阻抗控制就像给信号修高速公路。想象一下,当你的信号以GHz频率在电路板上飞驰时,突然遇到路面凹凸不平(阻抗突变),信号完整性就会像失控的赛车一样…...
kdmapper 代码架构分析:深入理解各个组件的设计原理与实现
kdmapper 代码架构分析:深入理解各个组件的设计原理与实现 【免费下载链接】kdmapper KDMapper is a simple tool that exploits iqvw64e.sys Intel driver to manually map non-signed drivers in memory 项目地址: https://gitcode.com/gh_mirrors/kd/kdmapper …...
大模型应用开发:从环境搭建到项目部署完整流程
大模型应用开发:从环境搭建到项目部署完整流程 标签:#人工智能、#大模型、#自然语言处理、#大模型开发、#智能体开发、#agent开发、#AI 系统封装学习规划(从玩具到产品) 打包成Docker:写一个Dockerfile(我手…...
如何高效保存B站视频?开源工具BiliDownload全解析
如何高效保存B站视频?开源工具BiliDownload全解析 【免费下载链接】BiliDownload B站视频下载工具 项目地址: https://gitcode.com/gh_mirrors/bil/BiliDownload 在数字内容快速迭代的今天,跨平台视频下载工具已成为内容创作者和学习者的必备利器…...
Ganache Provider事件系统:如何监控和调试智能合约执行
Ganache Provider事件系统:如何监控和调试智能合约执行 【免费下载链接】ganache :warning: The Truffle Suite is being sunset. For information on ongoing support, migration options and FAQs, visit the Consensys blog. Thank you for all the support over…...
计算机中级-数据库系统工程师-操作系统-进程管理(2)
一、死锁1. 死锁的定义现象描述: 指两个以上的进程互相都要求对方已经占有的资源,导致无法继续运行下去的现象。核心特征: 多个进程互相等待对方释放已获得的资源,导致所有进程都在无限等待。1)例题:死锁示例案例说明: 5个进程(A-E)每个需要4…...
GLM-OCR模型长短期记忆(LSTM)解码器技术剖析
GLM-OCR模型长短期记忆(LSTM)解码器技术剖析 你是不是觉得现在的OCR(光学字符识别)技术特别神奇?一张图片拍下去,里面的文字瞬间就被识别出来了,又快又准。这背后,除了强大的视觉模…...
OpenClaw稳定性提升:Qwen3-14B长时运行的内存泄漏排查
OpenClaw稳定性提升:Qwen3-14B长时运行的内存泄漏排查 1. 问题背景:72小时无人值守的意外崩溃 上周我尝试用OpenClawQwen3-14B搭建一个自动化内容处理流水线,期望它能724小时不间断工作。前48小时运行良好,但在第72小时突然发现…...
