【网络】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
相关推荐
iAm_Ike4 小时前
Go 中自定义类型与基础类型间的显式类型转换详解
jvm·数据库·python
iuvtsrt4 小时前
Golang怎么实现方法集与接口的匹配_Golang如何理解值类型和指针类型实现接口的区别【详解】
jvm·数据库·python
上海云盾-小余5 小时前
域名解析被劫持怎么办?DNS 安全防护与异常修复全教程
网络·安全·ddos
科技风向标go5 小时前
**2026年Q2中国消费级监控摄像头市场观察:存量时代的竞争逻辑重构**
网络·安全·监控·户外安防
旦莫5 小时前
AI驱动的纯视觉自动化测试:知识库里应该积累什么知识内容
人工智能·python·测试开发·pytest·ai测试
原来是猿5 小时前
网络计算器:理解序列化与反序列化(中)
linux·运维·服务器·网络·tcp/ip
知识领航员6 小时前
蘑兔AI音乐深度实测:功能拆解、实测表现与适用场景
java·c语言·c++·人工智能·python·算法·github
汪汪大队u7 小时前
续:从 Docker Compose 到 Kubernetes(2)—— 服务优化与排错
网络·后端·物联网·struts·容器
如何原谅奋力过但无声7 小时前
【灵神高频面试题合集06-08】反转链表、快慢指针(环形链表/重排链表)、前后指针(删除链表/链表去重)
数据结构·python·算法·leetcode·链表
deephub8 小时前
2026 RAG 选型指南:Vector、Graph、Vectorless 该怎么挑
人工智能·python·大语言模型·rag