import socket import time import random import string # 定义一些常量 BUFFER_SIZE = 1024 # 发送缓冲区大小,这里是1KB DATAGRAM_SIZE = 128 # 每个UDP数据包的大小 TARGET_BANDWIDTH_MBPS = 1 # 目标带宽,1 Mbps PACKETS_PER_SECOND = TARGET_BANDWIDTH_MBPS * 1024 * 1024 / (8 * DATAGRAM_SIZE) # 计算每秒需要发送的数据包数量 # 目标服务器的IP和端口 SERVER_IP = '127.0.0.1' # 请替换为实际服务器IP SERVER_PORT = 12345 # 请替换为实际端口 def generate_random_data(size): """生成随机数据""" random.choice(string.ascii_letters) return ''.join(random.choice(string.ascii_letters + string.digits) for _ in range(size)).encode() def main(): # 创建UDP套接字 client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) print(f"Starting UDP bandwidth test to {SERVER_IP}:{SERVER_PORT} aiming for {TARGET_BANDWIDTH_MBPS} Mbps...") start_time = time.time() total_packets_sent = 0 try: while True: # 生成随机数据 data = generate_random_data(DATAGRAM_SIZE) # 发送数据包 client_socket.sendto(data, (SERVER_IP, SERVER_PORT)) total_packets_sent += 1 # 控制发送速率以达到目标带宽 elapsed_time = time.time() - start_time if elapsed_time >= 1: actual_bandwidth = (total_packets_sent * DATAGRAM_SIZE * 8) / (elapsed_time * 1024 * 1024) print(f"Actual bandwidth: {actual_bandwidth:.2f} Mbps") total_packets_sent = 0 start_time = time.time() time.sleep(1 / PACKETS_PER_SECOND) # 等待,控制发送频率 except KeyboardInterrupt: print("\nBandwidth test interrupted by user.") finally: client_socket.close() if __name__ == "__main__": main()
import socket
# 服务器地址和端口
SERVER_IP = '0.0.0.0' # 监听所有可用网络接口
SERVER_PORT = 12345 # 与客户端脚本中的端口保持一致
# 创建UDP套接字
server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
# 绑定IP和端口
server_socket.bind((SERVER_IP, SERVER_PORT))
print(f"UDP server started on {SERVER_IP}:{SERVER_PORT}")
try:
while True:
# 接收数据和发送者地址
data, addr = server_socket.recvfrom(1024) # 1024是缓冲区大小,可根据实际情况调整
print(f"Received data from {addr}: {data.decode('utf-8')}") # 解码并打印接收到的数据
except KeyboardInterrupt:
print("\nServer stopped by user.")
finally:
server_socket.close()