Python3 网络通信实战指南
核心概念与基础架构
Python 提供了完整的网络编程能力,涵盖底层套接字操作和高层连接管理。通过 socket 模块,开发者可构建跨设备的通信系统,支持 TCP 与 UDP 协议。
套接字创建与配置
使用 socket.socket() 初始化通信端点,参数定义通信方式:
- 地址族(family):通常为
AF_INET(IPv4)或AF_INET6(IPv6) - 类型(type):
SOCK_STREAM表示面向连接的流式传输(TCP),SOCK_DGRAM代表无连接的数据报(UDP) - 协议(proto):默认为 0,由系统自动选择对应协议
关键操作方法概览
| 方法 | 用途 |
|---|---|
bind((host, port)) | 将套接字绑定到指定主机与端口 |
listen(backlog) | 启动监听模式,允许最大 backlog 个等待连接 |
accept() | 接收客户端连接,返回新会话对象与客户端信息 |
connect((host, port)) | 主动发起与远程服务的连接 |
recv(buffer_size) | 读取指定大小的数据块,适用于 TCP |
send(data) | 发送数据,返回实际发送字节数 |
sendall(data) | 确保全部数据发送成功,失败时抛出异常 |
close() | 关闭当前连接资源 |
settimeout(seconds) | 设置操作超时时间,防止无限阻塞 |
典型应用实例
服务器端实现
# server.py
import socket
# 建立基于 IPv4 与 TCP 的通信通道
server_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 绑定本地回环地址与固定端口
server_socket.bind(('127.0.0.1', 8888))
# 启动监听,最多维护 5 个待处理连接
server_socket.listen(5)
print("服务已启动,等待客户端接入...")
while True:
client_conn, client_addr = server_socket.accept()
print(f"新连接来自: {client_addr}")
response_msg = "欢迎访问学习平台!\n"
client_conn.send(response_msg.encode('utf-8'))
client_conn.close()
客户端连接程序
# client.py
import socket
# 创建用于连接的套接字
client_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
# 连接到服务器
client_socket.connect(('127.0.0.1', 8888))
# 接收响应内容
received_data = client_socket.recv(1024)
print("收到消息:", received_data.decode('utf-8'))
# 关闭连接
client_socket.close()
运行流程演示
- 在终端中启动服务端:
$ python3 server.py - 在另一个终端执行客户端:
$ python3 client.py - 预期输出结果:
客户端显示:`收到消息: 欢迎访问学习平台!`
服务端控制台输出:`新连接来自: ('127.0.0.1', 54321)`
常用网络协议支持模块
Python 内置多个高级网络模块,简化常见任务:
| 协议 | 用途 | 标准端口 | 对应模块 |
|---|---|---|---|
| HTTP | 网页请求与响应 | 80 | http.client, urllib |
| FTP | 文件上传下载 | 21 | ftplib |
| SMTP | 邮件发送 | 25 | smtplib |
| POP3 | 接收邮件 | 110 | poplib |
| IMAP4 | 邮箱同步与检索 | 143 | imaplib |
| Telnet | 远程命令行交互 | 23 | telnetlib |
上述模块可直接调用,无需手动处理底层网络细节,显著提升开发效率。