在 Python 中,TCP 通信核心依赖标准库 (无需额外安装),分为底层原生类 、高层简化类 、异步高性能类三层,上手成本极低。
新手优先 → 进阶高性能的顺序整理,附核心类、用途和极简示例:
一、Python TCP 通信核心库(标准库,必学)
1. 底层核心:socket 模块(万能基础)
对应 C# 的 Socket 基类,所有 Python TCP 通信的底层实现,原生支持 TCP/UDP,灵活通用,是最基础的选择。
核心类/对象
socket.socket(family=AF_INET, type=SOCK_STREAM)AF_INET:IPv4 协议(家用/通用)SOCK_STREAM:指定 TCP 协议
角色分工
| 用法 | 角色 | 核心方法 |
|---|---|---|
bind() / listen() / accept() |
服务端 | 监听端口、接受客户端连接 |
connect() |
客户端 | 主动连接服务端 |
recv() / send() |
通用 | 收发字节数据 |
2. 高层简化:socketserver 模块(快速写服务端)
对应 C# 的 TcpListener,官方封装好的高层类 ,屏蔽底层细节,一键实现多线程/多进程 TCP 服务端,新手写服务端首选。
核心类
| 类名 | 作用 | 推荐度 |
|---|---|---|
TCPServer |
基础单线程 TCP 服务端 | ⭐⭐ |
ThreadingTCPServer |
多线程 TCP 服务端(支持多客户端同时连接,家用最常用) | ⭐⭐⭐⭐⭐ |
ForkingTCPServer |
多进程 TCP 服务端(Linux 专用) | ⭐⭐ |
BaseRequestHandler |
自定义数据处理逻辑(必须继承重写) | 核心 |
3. 现代高性能:asyncio 模块(异步 TCP)
对应 C# 的 System.IO.Pipelines/异步模型,Python 官方推荐的高并发方案,无阻塞、高吞吐,适合物联网、消息推送等场景。
核心类/函数
asyncio.start_server():创建异步 TCP 服务端asyncio.open_connection():创建异步 TCP 客户端StreamReader/StreamWriter:异步读写数据流
二、第三方进阶库(大型项目用)
- Twisted:老牌重量级异步网络框架,工业级 TCP 服务端
- gevent:协程 TCP,低开销高并发
- ZeroMQ:高级封装 TCP,简化消息通信
新手只用标准库就足够,第三方库无需一开始学习。
三、极简代码示例(直接复制运行)
1. 基础版:socket 实现 TCP(客户端+服务端)
服务端
python
import socket
# 创建TCP服务端
server = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
server.bind(("127.0.0.1", 8888)) # 绑定IP端口
server.listen(5) # 监听连接
print("服务端启动,等待客户端...")
# 接受连接
conn, addr = server.accept()
print(f"客户端已连接:{addr}")
# 收发数据
data = conn.recv(1024) # 接收数据
print(f"收到:{data.decode('utf-8')}")
conn.send(b"Server received") # 回复数据
# 关闭
conn.close()
server.close()
客户端
python
import socket
# 创建TCP客户端
client = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
client.connect(("127.0.0.1", 8888)) # 连接服务端
# 收发数据
client.send(b"Hello TCP Server")
data = client.recv(1024)
print(f"收到回复:{data.decode('utf-8')}")
client.close()
2. 推荐版:socketserver 多线程 TCP 服务端
支持多个客户端同时连接,家用/小项目最优解:
python
from socketserver import BaseRequestHandler, ThreadingTCPServer
# 自定义处理类
class Handler(BaseRequestHandler):
# 处理客户端数据
def handle(self):
print(f"新连接:{self.client_address}")
# 接收数据
data = self.request.recv(1024)
print(f"收到:{data.decode()}")
# 回复
self.request.send(b"Multi-thread TCP Server OK")
# 启动多线程服务端
if __name__ == '__main__':
server = ThreadingTCPServer(("127.0.0.1", 8888), Handler)
print("多线程TCP服务端启动")
server.serve_forever()
四、快速选型指南(对应你的需求)
- 简单通讯、小工具 →
socket模块(最通用) - 家用服务端、多客户端连接 →
socketserver.ThreadingTCPServer(首选,对应 C# TcpListener) - 高并发、物联网、现代项目 →
asyncio异步 TCP - 大型工业级服务 → Twisted
补充关键知识点
- TCP 粘包:和 C# 一样,TCP 是流协议,会出现粘包,需要自定义数据格式(加长度头/分隔符)解决;
- 编码 :TCP 只能收发字节数据(bytes) ,字符串必须用
encode()/decode()转换; - 全平台:Windows/Linux/macOS 代码完全通用。
总结
- 新手首选 :
socketserver.ThreadingTCPServer(高层封装,省心) - 底层灵活 :
socket.socket() - 高并发 :
asyncio异步 TCP