/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */
#content_views .toc,
/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */
#content_views.markdown_views > p:empty:has(+ .toc),
#content_views.markdown_views > .toc + p:empty,
/* 富文本旧版目录标记 */
#content_views.htmledit_views #main-toc,
#content_views.htmledit_views #hr-toc,
#content_views.htmledit_views p[id*=\”-toc\”] {
display: none !important;
}
/* 目录去掉后,紧跟的首个标题不再多出一块上边距 */
#content_views.markdown_views > .toc + h1,
#content_views.markdown_views > .toc + h2,
#content_views.markdown_views > .toc + h3,
#content_views.markdown_views > .toc + h4,
#content_views.markdown_views > .toc + p:empty + h1,
#content_views.markdown_views > .toc + p:empty + h2,
#content_views.markdown_views > .toc + p:empty + h3,
#content_views.markdown_views > .toc + p:empty + h4 {
margin-top: 0 !important;
}

前言
上一篇我们吃透了TCP网络编程核心实战,掌握了面向连接的可靠通信逻辑,能独立开发TCP客户端与服务端程序,解决了粘包等核心坑点。这一篇我们将基于TCP协议,结合面向对象设计,从零到一构建一个多用户聊天室项目——这是网络编程最经典的综合实战案例,涵盖TCP通信、多线程并发、线程安全、协议设计、面向对象封装等核心知识,能帮你将前两篇的知识点融会贯通,真正掌握网络编程在真实项目中的应用。
本节课作为网络编程的综合实战篇,专门讲透如何将TCP基础知识落地为完整项目,从需求分析、协议设计到完整代码实现,每一步都附详细讲解和逐行注释代码,帮你彻底吃透多用户聊天室的完整开发流程,为后续开发更复杂的网络应用(如即时通讯、游戏服务器、物联网平台)打下坚实基础。

本节核心学习内容:
- 项目概述:多用户聊天室的功能需求和整体架构
- 通信协议设计:自定义文本行协议,明确客户端与服务器的消息格式
- 系统设计:面向对象的类设计(User、Server、ClientHandler、ChatClient)
- 多线程与线程安全:如何用锁保护共享数据,避免竞态条件
- 详细开发步骤:从单客户端通信到完整功能的增量开发全过程
- 完整代码展示:带超详细注释的服务器端和客户端代码
- 常见问题与解决方案:端口占用、粘包、线程泄漏等坑点避坑指南
- 项目扩展建议:图形界面、文件传输、加密通信等进阶方向
- 核心总结:TCP聊天室项目的知识要点与开发心得
文章目录
- 前言
- 一、项目概述
-
- 1.1 项目背景
- 1.2 项目目标
- 1.3 功能需求
- 二、通信协议设计
- 三、系统设计
-
- 3.1 类设计
- 3.2 多线程与线程安全
- 四、详细开发步骤
-
- 第1步:实现单客户端通信(基础)
-
- 目标
- 具体任务
- 代码实现
- 测试方法
- 小结
- 第2步:支持多客户端(引入多线程)
-
- 目标
- 具体任务
- 代码实现
- 测试方法
- 小结
- 第3步:添加昵称和命令系统
-
- 目标
- 具体任务
- 代码实现
- 测试方法
- 小结
- 第4步:实现私聊功能
-
- 目标
- 具体任务
- 代码修改
- 测试方法
- 小结
- 第5步:重构为面向对象形式
-
- 目标
- 具体任务
- 测试方法
- 五、完整代码
-
- server.py(最终版本)
- client.py(最终版本)
- 六、常见问题与解决方案
-
- 1. 地址已被占用
- 2. 客户端连接后立即断开
- 3. 广播时出现 `RuntimeError: dictionary changed size during iteration`
- 4. 私聊消息发送失败
- 5. 客户端接收线程卡死
- 6. 多个客户端同时发送消息时乱序
- 七、项目扩展建议
- 八、核心总结
- 九、专栏订阅
一、项目概述
1.1 项目背景
网络编程是Python全栈开发的核心技能之一,而多用户聊天室是练习网络编程最经典的项目。通过实现一个聊天室,你将深入理解TCP协议的实际应用、多线程并发处理、线程安全以及如何将面向对象设计运用到网络程序中。本项目将实现一个控制台下的多用户聊天室,支持多个用户同时在线、设置昵称、发送公共消息、私聊、查看在线用户等功能。
1.2 项目目标
- 实现一个基于TCP协议的多用户聊天室服务器,能够同时处理多个客户端连接。
- 实现一个基于TCP协议的客户端,能够连接服务器并进行聊天。
- 客户端需支持昵称注册、公共聊天、私聊、查看在线用户、退出等功能。
- 服务器需保证多线程环境下共享数据的安全,正确处理客户端异常断开。
- 代码结构清晰,符合面向对象设计原则,便于扩展和维护。
1.3 功能需求
服务器端
- 监听指定IP和端口(如127.0.0.1:8888),接受客户端连接。
- 为每个连接创建一个独立线程,负责与该客户端的所有通信。
- 维护在线用户列表,包含每个用户的昵称及其对应的socket连接。
- 接收客户端消息,解析命令并执行相应操作:
- NICK 昵称:设置昵称,检查唯一性;成功则加


