TCP编程
Python Socket 入门与实战
TCP 是面向连接、可靠的传输层协议,是构建大多数互联网应用(如 HTTP、SSH、邮件协议)的基础。Python 标准库的 socket 模块,为我们提供了一套简洁抽象的 API,来快速实现 TCP/UDP 网络编程。
本文将从基础概念讲起,逐步演示现代风格的 TCP 客户端/服务器、UDP 示例、以及进阶优化点,最后总结常见问题与最佳实践。
1. Socket 核心三要素
Socket 是网络连接的“端点”抽象,要建立有效通信,必须同时明确三个参数:
- 目标主机标识:IP 地址(IPv4/IPv6)或域名
- 端口号:1-65535 之间的整数,区分同一主机上的不同网络服务
- 传输协议:TCP(
SOCK_STREAM,流套接字)或 UDP(SOCK_DGRAM,数据报套接字)
2. TCP 客户端编程
TCP 是“三次握手”建立连接、“四次挥手”断开的可靠协议,数据传输像读写文件一样是有序流。
2.1 最简 HTTP 客户端(不推荐老写法)
2.2 现代 Python 推荐写法
上下文管理器 (with 语句) 自动接管 socket 资源释放,无需担心异常时未关闭:
3. TCP 服务器编程
服务器的核心流程是:创建 socket → 绑定地址端口 → 监听 → 接受连接 → 处理请求 → 关闭。
3.1 多线程 Echo 服务器(基础版)
3.2 生产级简易优化版
基础版没有并发数限制和超时机制,容易被恶意连接打挂,我们用 concurrent.futures.ThreadPoolExecutor 改造:
4. 快速补充:UDP Socket
UDP 是无连接、不可靠的协议,适合直播、游戏等对实时性要求高于完整性的场景,代码更短:
5. 最佳实践与避坑
避坑速查
通用建议
- 始终用
with或try/finally释放资源 - 合理设置超时(
settimeout()) - 生产环境优先用异步或成熟框架(如
asyncio、Tornado、FastAPI的底层) - 不要用
send()代替sendall():sendall()会循环发送直到所有数据写完
6. 总结
本文用简洁的代码演示了 Python 标准库 socket 模块的核心用法,包括:
- TCP 流通信的三次握手、四次挥手逻辑
- 现代自动资源管理的写法
- 生产级简易服务器的优化
- 无连接 UDP 的快速示例
- 常见避坑点
如果需要处理更复杂的场景,可以进一步学习 asyncio 异步 Socket、SSL/TLS 加密(ssl.create_default_context())等进阶内容。

