3. UDP服务器与客户端通信

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()

运行与验证

  1. 启动服务器:在终端执行 python udp_server.py,看到监听提示即表示启动成功。
  2. 启动客户端:另开一个终端执行 python udp_client.py,输入任意文本(如 Hello UDP)后回车。
  3. 预期输出:
    • 服务器终端打印:收到来自 ('127.0.0.1', 客户端端口) 的消息: Hello UDP
    • 客户端终端打印:收到服务器回复: 服务器已收到: Hello UDP
  4. 通过条件:客户端收到与发送内容一致的回复消息,且服务器终端正确显示客户端地址与消息内容,即判定通信成功。

关键说明

  • UDP是无连接协议,服务器使用 recvfrom() 同时获取数据和客户端地址,再通过 sendto() 向该地址回复。
  • 服务器为无限循环,按 Ctrl+C 可手动终止;客户端发送一次消息后即自动退出。
  • 若需跨设备测试,将 HOST 改为服务器实际IP,并确保防火墙允许UDP端口通信。