如何修改UDP服务端与客户端,实现多次请求计算平均响应时间
解决方案
服务端原有代码无需做任何修改,其自带的无限循环监听逻辑可以正常处理多次重复请求,仅需调整客户端代码实现多次请求发送、耗时记录与平均值计算即可。
修改后客户端完整代码
import socket import string import random from time import time def random_string(length, chars=string.ascii_letters + string.digits): return ''.join(random.choice(chars) for x in range(length)) server_port = 21060 client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 定义请求次数,可按需调整为6 REQUEST_COUNT = 5 # 存储每次请求的响应时间 response_times = [] # 提前生成固定的请求内容,保证每次发送的是同一个请求 input_s = random_string(100) for index in range(REQUEST_COUNT): sent_time = time() client_socket.sendto(bytes(input_s, encoding='utf8'), ('127.0.0.1', server_port)) input_s_modified, address = client_socket.recvfrom(65535) received_time = time() # 计算单次耗时并存入列表 single_cost = received_time - sent_time response_times.append(single_cost) print(f'[CLIENT] 第{index+1}次请求响应来自服务器 {address}, 内容为: "{str(input_s_modified.decode("utf8"))}",耗时{single_cost}秒') client_socket.close() # 计算算术平均响应时间 avg_cost = sum(response_times) / len(response_times) print(f"\n{REQUEST_COUNT}次请求的平均响应时间为: {avg_cost}秒")
改动说明
- 新增
REQUEST_COUNT常量定义请求次数,示例中设置为5,可直接修改为6或其他你需要的数值 - 新增
response_times列表,用来存储每一次请求的响应时间 - 将原来单次发送请求、接收响应、计算耗时的逻辑包裹在for循环中,循环执行指定的次数
- 固定请求内容
input_s在循环外生成,保证每次发送的都是同一个请求符合需求 - 所有请求执行完成后,通过求和除以总次数的方式计算算术平均响应时间并输出
运行时先启动原有UDP服务端,再启动修改后的客户端即可得到你需要的平均响应时间结果。
内容的提问来源于stack exchange,提问作者Florin Ivan
相关产品推荐
相关产品推荐

