【网络】Python 怎么做TCP通讯

在 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:异步读写数据流

二、第三方进阶库(大型项目用)

  1. Twisted:老牌重量级异步网络框架,工业级 TCP 服务端
  2. gevent:协程 TCP,低开销高并发
  3. 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()

四、快速选型指南(对应你的需求)

  1. 简单通讯、小工具 → socket 模块(最通用)
  2. 家用服务端、多客户端连接 → socketserver.ThreadingTCPServer(首选,对应 C# TcpListener)
  3. 高并发、物联网、现代项目 → asyncio 异步 TCP
  4. 大型工业级服务 → Twisted

补充关键知识点

  1. TCP 粘包:和 C# 一样,TCP 是流协议,会出现粘包,需要自定义数据格式(加长度头/分隔符)解决;
  2. 编码 :TCP 只能收发字节数据(bytes) ,字符串必须用 encode()/decode() 转换;
  3. 全平台:Windows/Linux/macOS 代码完全通用。

总结

  1. 新手首选 :socketserver.ThreadingTCPServer(高层封装,省心)
  2. 底层灵活 :socket.socket()
  3. 高并发 :asyncio 异步 TCP
相关推荐
青瓦梦滋20 小时前
WebSocket协议
linux·服务器·网络·c++·websocket·网络协议·http
zhang1338308907521 小时前
传统机械三杯式风速传感器易磨损冻堵?CG-88金属超声波风速风向传感器给出免运维方案
运维·服务器·网络·人工智能·自动化
知已难寻21 小时前
第 2 篇 · 云的地基:服务器、存储、网络三大基础设施
运维·服务器·网络·云原生·云计算·负载均衡·1024程序员节
wangchunyu11421 小时前
JAVA CompletableFuture异步编程实战
java·开发语言·python
IpdataCloud1 天前
批量查IP的API接口怎么选?免费API配额瓶颈与离线库本地批量方案实测
网络·网络协议·tcp/ip
2501_944521591 天前
Immer 跨端三方库仓颉适配全流程
python·eclipse·django
信誓旦旦的程序猿1 天前
【Python量化实战宝典 #26】止损与回撤控制手册:移动止损、最大回撤(Python 可跑)
python·1024程序员节·股票数据api·股票数据api接口·股票api数据接口·股票量化数据api·股票量化数据接口
2501_944521591 天前
Deepmerge 跨端三方库仓颉适配全流程
java·python·eclipse·github
Patrick在香港1 天前
同一行 strftime,两台机器跑出两种日期
python·datetime·时区·locale·日期处理
2601_967987371 天前
用Python+OpenCV+YOLO写个游戏脚本:从自动瞄准到自动采集的保姆级教程
python·opencv·yolo·目标检测·游戏自动化