wangchuanli 52fa7c975e feat: 添加 TCP 服务端与客户端示例项目
包含基于 Python socket 的多线程 TCP 服务端、交互式客户端、README 文档、MIT 许可证及 .gitignore。
2026-08-24 10:59:43 +08:00

TCP Server & Client (Python)

一个基于 Python 标准库 socket 实现的轻量级 TCP 通信示例项目,包含服务端和交互式客户端。

适合用于:

  • 学习 TCP Socket 编程的基础流程
  • 本地调试网络程序、验证端口连通性
  • 作为其他 TCP 服务(如 Netty、自定义协议)的简易测试客户端

⚠️ 本项目仅用于学习和测试,未做并发处理、鉴权及安全防护,请勿直接用于生产环境。

项目结构

tcp_server/
├── tcp_server.py   # TCP 服务端:监听端口、接收消息并返回确认
├── tcp_test.py     # TCP 客户端:交互式发送消息、接收服务端响应
└── README.md       # 项目文档

环境要求

  • Python 3.6+(仅使用标准库,无需安装第三方依赖)

快速开始

1. 启动服务端

打开一个终端,运行服务端(默认监听 0.0.0.0:30008):

python tcp_server.py

启动成功后会看到:

🚀 服务器正在监听 0.0.0.0:30008 ...
等待客户端连接...

2. 启动客户端

另开一个终端,运行客户端并输入消息:

python tcp_test.py
正在尝试连接到 127.0.0.1:30008 ...
✅ 连接成功!请输入要发送的消息(输入 'exit' 退出):
我: hello
📤 消息已发送。
📥 服务器响应: 服务器已收到: hello
我: exit
正在断开连接...

3. 本机自测

如果服务端和客户端在同一台机器,客户端默认连接 127.0.0.1:30008 即可。 跨机器测试时,请将 tcp_test.py 中的 HOST 改为服务端的实际 IP。

配置说明

服务端 tcp_server.py

参数 默认值 说明
HOST '0.0.0.0' 监听地址,0.0.0.0 表示接受所有接口
PORT 30008 监听端口,需与客户端保持一致

客户端 tcp_test.py

参数 默认值 说明
HOST '127.0.0.1' 服务端 IP,跨机测试请改为实际地址
PORT 30008 服务端端口,需与服务端保持一致

实现要点

服务端(tcp_server.py)

  1. 创建 TCP Socket:socket(AF_INET, SOCK_STREAM)
  2. 设置 SO_REUSEADDR,避免服务重启后端口处于 TIME_WAIT 导致绑定失败
  3. bind 绑定地址,listen(5) 开始监听连接队列
  4. 主循环不断 accept 新连接,每接受一个连接就创建一个守护线程 handle_client 处理,从而支持并发多客户端
  5. 每个连接线程内循环 recv(1024) 接收数据,空数据表示客户端断开;收到消息后回送 服务器已收到: <消息>
  6. 支持 Ctrl+C 优雅关闭;finally 中确保关闭监听套接字

使用 threading.Thread(daemon=True),主线程退出时子线程会自动结束,便于调试与退出。

客户端(tcp_test.py)

  1. 创建 TCP Socket 并 connect 到服务端
  2. 通过 input() 循环读取用户输入并 sendall 发送(末尾追加 \n)
  3. 发送后设置 5 秒超时等待服务端响应,超时或空响应均给出提示
  4. 输入 exit 退出;任何情况下都在 finally 中关闭套接字

常见问题

Q: 客户端提示 ConnectionRefusedError? A: 确认服务端已启动、端口一致,且防火墙未拦截该端口。

Q: 服务端只处理一个连接? A: 已支持并发。服务端采用多线程模型(threading),每接受一个客户端连接就启动一个守护线程独立处理,可同时服务多个客户端。监听队列 backlog 设为 5,高并发长连接场景可结合连接池或 selectors/asyncio 进一步优化。

Q: 可以和 Java Netty 等服务端互通吗? A: 客户端发送以 \n 结尾的消息,可对接按行分隔(如 LineBasedFrameDecoder)的协议方;服务端的回送逻辑为简单的 echo 确认。

License

MIT

S
描述
一个基于 Python 标准库 socket 实现的轻量级 TCP 通信示例项目,包含服务端和交互式客户端。
自述文档 MIT
31 KiB
语言
Python 100%