You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

带失败重发功能的UDP客户端与服务端实现问题咨询

UDP客户端自动重传实现方案

服务端代码无需修改

原有服务端逻辑已经满足要求:每次收到客户端请求时都会重新生成随机数,仅当随机数≥4时返回响应,可直接使用原有代码。

修改后的客户端代码

核心改动是为每个序号的Ping请求新增重试循环,触发超时异常时自动重发当前请求,直到成功收到服务端响应为止:

from time import *
from socket import *

localhost = '127.0.0.1'

for i in range(1, 11):
    clientSocket = socket(AF_INET, SOCK_DGRAM)
    clientSocket.settimeout(0.5)
    request_success = False
    # 循环重试直到当前请求收到响应
    while not request_success:
        date_current = ctime()
        start_time = time()
        try:
            request_msg = bytes(f"Ping {i} {date_current}", 'utf8')
            clientSocket.sendto(request_msg, (localhost, 12000))
            resp_msg, server_addr = clientSocket.recvfrom(1024)
            rtt = time() - start_time
            print(resp_msg.decode())
            print(f"Ответ {localhost} подтверждено: {rtt:.6f}")
            print()
            request_success = True
        except timeout:
            print(request_msg.decode())
            print("Время вышло,正在重发请求...")
            print()
clientSocket.close()

逻辑说明

  • 客户端每发起一个序号的Ping请求,会进入专属重试循环,只有收到服务端返回的成功响应才会退出循环,处理下一个序号的请求
  • 每次重试时都会重新生成请求时间戳、重置计时,保证RTT计算结果准确
  • 服务端每次收到重发的请求都会生成全新的随机数,直到随机数≥4时返回响应,完成本次请求交互

内容的提问来源于stack exchange,提问作者GOGA GOGA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 10:15:02