当前位置:首页>python>Python实现局域网文件共享神器

Python实现局域网文件共享神器

  • 2026-10-21 13:27:46
Python实现局域网文件共享神器

效果图

局域网文件共享神器:一键把电脑变“NAS”!

“嘿,隔壁工位的小明又拿着U盘来找你拷‘学习资料’?别再插来插去了!今天咱们写一个10秒建站的小工具,让你的电脑秒变‘私人网盘’:插上网线、点开脚本、隔壁小姐姐就能用浏览器愉快地下载你的‘学习资料’,还带密码锁,防老王,防老板,防熊孩子!全程只需一个 Python 文件,零依赖、零配置、零吐槽——妈妈再也不用担心我不会搭服务器啦!”


目录


    1. 项目鸟瞰:一张图看懂结构

    ┌-------------------------------┐│         FileSharingGUI        │  ← 负责貌美如花(tk 界面)├-------------┬-----------------┤│  FileSharingServer            │  ← 负责赚钱养家(socket 服务)├-------------┴-----------------┤│  AuthHTTPRequestHandler       │  ← 负责安保(Basic Auth)└-------------------------------┘
    • 层级 1:__main__ 启动 FileSharingGUI。
    • 层级 2:FileSharingGUI 创建 FileSharingServer 实例。
    • 层级 3:FileSharingServer 在独立线程中跑 socketserver.TCPServer,并把请求交给 AuthHTTPRequestHandler。
    • 层级 4:AuthHTTPRequestHandler 继承 http.server.SimpleHTTPRequestHandler,在 do_GET 里加料做认证。

    2. 启动入口与主窗口:tk 的那点事儿

    代码

    if __name__ == "__main__":    root = tk.Tk()    app = FileSharingGUI(root)    root.mainloop()

    逐行解释

    行号
    作用
    1
    Python 惯用套路:当脚本直接运行时才启动 GUI;被 import 时安静如鸡。
    2
    创建 tk 根窗口,相当于画布。
    3
    把根窗口塞进 FileSharingGUI 这个“装修队”,让它贴瓷砖、打柜子。
    4
    进入 tk 的事件循环,相当于“店门已开,欢迎光临”。

    3. 核心发动机:FileSharingServer 全解析

    3.1 类定义 & 成员变量

    classFileSharingServer:def__init__(self, gui):        self.gui = gui          # 回调 GUI 写日志        self.server = None# socketserver.TCPServer 实例        self.server_thread = None# 子线程句柄        self.running = False# 状态机:跑 or 躺
    • self.gui:把 GUI 实例传进来,方便打日志。
    • self.server:真正在背后 accept() 的 TCP 服务器。
    • self.server_thread:防止阻塞 GUI,把服务器扔到后台线程。

    3.2 启动:start() 方法

    defstart(self, directory, port, username, password):if self.running:returnFalse    os.chdir(directory)  # 切换到共享目录,后续 SimpleHTTPRequestHandler 直接读文件    handler_class = partial(        AuthHTTPRequestHandler,        username=username orNone,        password=password orNone    )    socketserver.TCPServer.allow_reuse_address = Truetry:        self.server = socketserver.TCPServer(("", port), handler_class)        self.server.log_callback = self.gui.add_log  # 打通日志        ...
    • partial:把 username、password 提前塞进 AuthHTTPRequestHandler 的构造函数,优雅省事。
    • allow_reuse_address = True:防止“端口被占用”惨案。

    3.3 停止:stop() 方法

    defstop(self):if self.running and self.server:        self.server.shutdown()       # 停止 serve_forever        self.server.server_close()   # 关 socket        self.running = False        self.server_thread.join()    # 等线程优雅退出
    • shutdown() 会跳出 serve_forever 的循环,线程自然结束。

    4. 安全门禁:AuthHTTPRequestHandler 把老王拒之门外

    4.1 构造函数

    def__init__(self, *args, username=None, password=None, **kwargs):    self.username = username    self.password = password    super().__init__(*args, **kwargs)
    • 把用户名/密码存成实例变量,后面 do_GET 要用。

    4.2 发送 401 挑战

    defdo_AUTHHEAD(self):    self.send_response(401)    self.send_header('WWW-Authenticate', 'Basic realm="File Sharing"')    self.send_header('Content-type', 'text/html')    self.end_headers()
    • 经典 Basic Auth:浏览器看到 401 + WWW-Authenticate 头就会弹登录框。

    4.3 认证主流程

    defdo_GET(self):if self.username and self.password:        auth_header = self.headers.get('Authorization')ifnot auth_header:            self.do_AUTHHEAD(); return        auth_type, auth_data = auth_header.split(maxsplit=1)if auth_type.lower() != 'basic':            self.do_AUTHHEAD(); return        username, password = base64.b64decode(auth_data).decode().split(':', 1)if username != self.username or password != self.password:            self.do_AUTHHEAD(); return# 认证通过,父类接管    super().do_GET()
    • 只要用户名或密码为空,就跳过认证——方便纯内网分享。

    4.4 日志 & 异常处理

    deflog_message(self, fmt, *args):if hasattr(self.server, 'log_callback'):        self.server.log_callback(fmt % args)
    • 把原本打印到控制台的日志重定向到 GUI 的 Text 控件,实时刷屏。

    5. GUI 的五脏六腑:FileSharingGUI 造轮子

    5.1 初始化

    def__init__(self, root):    self.root = root    self.root.title("局域网文件共享工具")    self.root.geometry("700x500")    self.server = FileSharingServer(self)  # 创建发动机

    5.2 create_widgets

    用 ttk.LabelFrame 把界面切成四大块:

    1. 共享目录(带浏览按钮)
    2. 服务器设置(端口、IP、URL)
    3. 权限控制(用户名/密码)
    4. 日志文本框 + 滚动条

    5.3 浏览目录

    defbrowse_directory(self):    directory = filedialog.askdirectory()if directory:        self.shared_directory = directory        self.dir_entry.delete(0, tk.END)        self.dir_entry.insert(0, directory)
    • filedialog.askdirectory() 调出系统文件夹选择器,比手动输入路径优雅一万倍。

    5.4 启动服务器

    defstart_server(self):    directory = self.dir_entry.get().strip()ifnot os.path.isdir(directory):        messagebox.showerror("错误", "请选择有效的共享目录")return    ...
    • 各种边界检查:目录不存在、端口非法、只填用户名不填密码……统统弹窗警告。

    5.5 动态 URL

    local_ip = self.ip_label.cget("text")self.url_label.config(text=f"http://{local_ip}:{port}")
    • 隔壁小姐姐只需要在浏览器敲这行地址,就能看到你共享的“资料”。

    6. 线程与日志:让界面不卡还能实时吐槽

    6.1 线程启动

    self.server_thread = threading.Thread(target=self.server.serve_forever)self.server_thread.daemon = Trueself.server_thread.start()
    • daemon=True:主线程退出时子线程陪葬,防止关不掉。

    6.2 线程安全写日志

    defadd_log(self, message):    self.log_text.config(state=tk.NORMAL)    self.log_text.insert(tk.END, message + "\n")    self.log_text.see(tk.END)    self.log_text.config(state=tk.DISABLED)
    • Text 控件默认是 DISABLED,防止用户手滑删掉日志;写之前先 NORMAL,写完再关。

    7. 打包、部署、踩坑三连

    • 单文件打包:pyinstaller -F -w share_server.py 生成无控制台 exe,双击即用。
    • Windows 防火墙:第一次跑会弹出拦截,点“允许”。
    • 中文路径:os.chdir 对中文支持良好,但终端编码不对时日志会乱码,可 chcp 65001。

    8. 知识点总结与进阶脑洞

    类别
    已掌握
    可继续折腾
    网络
    socketserver、Basic Auth
    换成 HTTPS、JWT
    并发
    threading.Thread
    asyncio + aiohttp
    GUI
    tkinter/ttk
    PyQt、Web 前端
    打包
    PyInstaller
    Nuitka、Docker
    功能
    静态文件
    上传、断点续传、二维码

    项目目标达成

    1. 零基础也能一键共享文件夹。
    2. 支持密码,妈妈再也不担心隔壁老王。
    3. 实时日志,像刷弹幕一样看谁在偷你文件。
    4. 跨平台,Windows/Mac/Linux 通吃。

    把脚本丢进 U 盘,下次去丈母娘家,插上电脑就能分享婚纱照——程序员浪漫起来,连网线都在冒粉红泡泡!

    点击【关注+收藏】获取最新的实战代码案例

    Python 20天的学习计划

    Python的 7 天 学习计划

    Python实现在线书法生成器

    Python实现叶子雕刻图

    Python证件照多尺寸生成器

    Python实现人像证件照背景替换

    Python开发自定义打包exe程序

    Python实现印章生成器

    Python实现批量生产证书工厂

    Python一键生成带印章的word请假条

    Python快捷ps图片取色等编辑器

    Python实现批量生产证书工厂

    Python快捷ps图片取色等编辑器

    Python实现自定义取色器

    Python实现自动变成温柔水彩素描

    Python实现创意画板代码

    用Python打造汉字笔画查询工具:从GUI界面到笔顺动画实现

    Python实现表情包制作器

    Python实现中国象棋小游戏

    Python实现印章生成器

    Python模拟实现金山打字通

    Python超实用 Markdown 转富文本神器 —— 代码全解析

    Python实现贪吃蛇小游戏源码解析

    Python实现二维码生成

    Python实现视频播放器

    Python实现印章生成器

    Python实现在线印章制作

    Python+Ai实现一个简单的智能语音小助手

    Python实现简单记事本

    Python实现Markdown转HTML工具代码

    Python实现创意画板代码

    Python实现简易图画工具代码

    Python实现视频播放器

    Python实现简单记事本

    Python 实现连连看游戏代码解析

    Python实现简单电脑进程管理器

    Python一个超实用的工具-词频统计工具

    Python简易爬虫天气工具

    Python定时任务提醒工具

    Python《猜数字游戏代码解析》

    Python《简易计算器代码解析》

    Python+Ai在线文档生成小助手

    Python 《密码生成器代码解析》

    Python|+Ai实现一个简单的智能语音小助手

    Python实现简易图画工具代码

    Python实现Markdown转Html

    Python实现视频播放器

    Python 实现连连看游戏代码解析

    Python实现火山AI调用生成故事

    Python实现豆包Ai调用生成故事

    Python实现简单记事本

    Python实现简单电脑进程管理器

    【实战1】

    1. Python:生成二维码生成器

    2. Python-pgame实现迷宫

    3. Python-实现天气时钟小助手

    4. Python-QrCode实现各种二维码

    5. Python-pyglet实现鸿蒙时钟

    6. Python-pickle解析获取微信好友信息

    7. Python-wxPy初版实现微信消息轰炸

    8. Python实现八卦星空时钟

    9. Python实现国庆红旗头像效果

    10. Python-PIL实现图片上指定位置添加图标识

    【实战2】

    1. Python-wxPy初版实现微信消息轰炸

    2. Python-PIL库Image类解析

    3. Python-tlinter实现简单学生管理系统

    4. Python-itChat实现微信消息推发

    5. Python实现Pdf转Word

    6. Python-实现自动生成对联小助手

    7. Py2Exe另外一种方式的打包

    8. Python-tts生成语音转换小助手

    9. python-win32等实现exe自动添加到电脑自启动选项

    10. python实现桌面录制视频

    11. PySimpleGUI-checkboxPython实现图片截取成九宫格

    12. python打包成exe文件

    13. Python-faker生成虚拟数据

    14. python实现播放器Python-FastApi简单实现

    15. python爬取豆瓣电影影评

    16. Python 爬取公众号文章集合

    【实战3】

    1. python实现简易飞花令

    2. python-获取图猜成语的图片

    3. python-menu菜单实现

    4. Python-pySimpleGUI实现界面

    5. Python-彩色图片转换白描

    6. Python-moviepy-实现音视频播放器

    7. Python操作SQLite数据库

    8. Python-PySimpleGUI实现菜单

    9. python-Tkinter实现个性签名

    10. Python-WordCloud云词图

    11. Python-customTkinter的使用

    12. Python-tkinter(下)

    13. Python-tkinter(中)

    14. python-tkinter(1)

    15. Python实现视频小助手

    【实战4】

    1. Python实现视频小助手

    2. Python-flask-1:搭建主页面

    3. Python之tttkbootstrap界面

    4. python-PyQt5实现图片显示和简易阅读器

    5. 在Pycharm上配置Qt Designer 及 Pyuic

    6. Python之PIL实现一寸二寸等图片的裁剪和生成

    7. Python爬取金山词典查询结果

    8. python实现生成个性二维码

    9. AI人机对战版五子棋游戏(AI+pygame实现)

    10. python实现垃圾分类查询器

    11. python-实现菜单menu

    12. Python 领域运用之:自动化测试

    13. Python 领域运用:Web 开发

    14. Python 领域运用:自动化运维

    最新文章

    随机文章