【网络】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
相关推荐
超防局5 分钟前
网络安全渗透测试常用工具详解
网络·安全·web安全
为啥全要学7 分钟前
自注意力中随着根号dk的增大,qk点积的方差为什么也会增大
python·深度学习
来两个炸鸡腿40 分钟前
【Datawhale2607】llm-algo-leetcode task02 基础算子
人工智能·python·大模型
峥嵘life1 小时前
Andorid 打开热点,关闭有线网,ifconfig卡死分析解决
java·服务器·网络
瓦学妹1 小时前
代理IP连接失败怎么办?2026代理IP异常排查与解决方法
网络·网络协议·tcp/ip
庵中十三居士1 小时前
【纯AI无人工修改】AI Agent从0到1实战:50行Python手写核心循环,一次看懂所有Agent框架的底层逻辑
开发语言·人工智能·python
天天爱吃肉82181 小时前
# 商用车多体动力学整车仿真学习笔记(开篇总览)
人工智能·笔记·python·功能测试·学习·汽车
Allen说改装2 小时前
2025 APAxpo佛山改装展的展出规模达到了多少平方米?
人工智能·python
hehelm2 小时前
AI 大模型接入 SDK —项目概述
linux·服务器·网络·数据库·c++