Python网络编程核心是掌握TCP(可靠连接,如文件上传)与UDP(轻量无连接,如视频流)的区别及应用;文中给出了TCP回声服务和UDP时间查询的完整可运行代码,并附调试技巧与进阶方向。
Python 网络编程不难上手,关键在理解 TCP 和 UDP 的本质区别,并用对场景。TCP 适合需要可靠传输的通信(比如文件上传、登录验证),UDP 更轻量,适合实时性要求高、能容忍少量丢包的场景(比如视频流、游戏状态同步)。下面直接从实战出发,带你写出可运行的客户端和服务器代码。
TCP 是面向连接的协议,通信前必须三次握手建立连接,传输中保证顺序和不丢失。写一个最简但完整的回声服务器(收到什么就发回什么)和客户端:
服务器端(server_tcp.py):
import socketserver = socket.socket(socket.AF_INET, socket.SOCK_STREAM) server.bind(('127.0.0.1', 8080)) server.listen(1) print("TCP 服务器启动,等待连接...")
conn, addr = server.accept() print(f"已连接客户端:{addr}")
while True: data = conn.recv(1024) if not data: break print(f"收到:{data.decode()}") conn.send(data) # 原样回传
conn.close() server.close()
客户端(client_tcp.py):
import socketclient = socket.socket(socket.AF_INET, socket.SOCK_STREAM) client.connect(('127.0.0.1', 8080))
msg = "Hello, TCP Server!" client.send(msg.encode()) response = client.recv(1024) print(f"服务器回复:{response.decode()}")
client.close()
运行顺序:先启动 server_tcp.py,再运行 client_tcp.py。注意两点:
UDP 不建连接、不重传、不排序,开销小,适合一对多、低延迟场景。下面实现一个单次请求-响应的“时间查询”服务:
服务器端(server_udp.py):
import socket import timeserver = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) server.bind(('127.0.0.1', 8081)) print("UDP 服务器启动,监听 8081...")
while True: data, addr = server.recvfrom(1024) if data == b"time": now = time.strftime("%Y-%m-%d %H:%M:%S") server.sendto(now.encode(), addr)
客户端(client_udp.py):
import socketclient = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
client.sendto(b"time", ('127.0.0.1', 8081)) response, _ = client.recvfrom(1024) print("当前时间:", response.decode())
client.close()
关键点:
概念,所以不用 close() 也能工作,但养成关闭习惯更稳妥写完跑不通?先查这几个地方:
掌握基础后,可按需延伸: