3. UDP服务器与客户端通信
任务目标
实现一个基于UDP协议的服务器与客户端程序:客户端向服务器发送文本消息,服务器接收后回复一条确认消息,客户端打印服务器回复。通过本案例掌握UDP套接字的创建、数据收发与关闭流程。
环境依赖
- Python 3.6+(标准库
socket,无需第三方包)
完整代码
将以下代码分别保存为 udp_server.py 和 udp_client.py,两个文件需放在同一目录下运行。
# udp_server.py
import socket
HOST = '127.0.0.1'
PORT = 8888
server_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
server_sock.bind((HOST, PORT))
print(f'UDP服务器已启动,监听 {HOST}:{PORT}')
while True:
data, client_addr = server_sock.recvfrom(1024)
message = data.decode('utf-8')
print(f'收到来自 {client_addr} 的消息: {message}')
reply = f'服务器已收到: {message}'
server_sock.sendto(reply.encode('utf-8'), client_addr)
# udp_client.py
import socket
HOST = '127.0.0.1'
PORT = 8888
client_sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
message = input('请输入要发送的消息: ')
client_sock.sendto(message.encode('utf-8'), (HOST, PORT))
reply, server_addr = client_sock.recvfrom(1024)
print(f'收到服务器回复: {reply.decode("utf-8")}')
client_sock.close()
运行与验证
- 启动服务器:在终端执行
python udp_server.py,看到监听提示即表示启动成功。 - 启动客户端:另开一个终端执行
python udp_client.py,输入任意文本(如Hello UDP)后回车。 - 预期输出:
- 服务器终端打印:
收到来自 ('127.0.0.1', 客户端端口) 的消息: Hello UDP - 客户端终端打印:
收到服务器回复: 服务器已收到: Hello UDP
- 服务器终端打印:
- 通过条件:客户端收到与发送内容一致的回复消息,且服务器终端正确显示客户端地址与消息内容,即判定通信成功。
关键说明
- UDP是无连接协议,服务器使用
recvfrom()同时获取数据和客户端地址,再通过sendto()向该地址回复。 - 服务器为无限循环,按
Ctrl+C可手动终止;客户端发送一次消息后即自动退出。 - 若需跨设备测试,将
HOST改为服务器实际IP,并确保防火墙允许UDP端口通信。