Python UDP Socket在Windows下无法接收响应的问题求助
UDP客户端在Windows下无法接收延迟响应的问题
服务端代码
以下是模拟处理请求耗时240秒后返回"OK"的UDP服务端代码:
import socket import time # 创建UDP套接字 server_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) # 绑定IP和端口 server_address = ('192.168.100.2', 9910) server_socket.bind(server_address) print('服务器已启动运行!') while True: # 接收客户端数据 data, client_address = server_socket.recvfrom(1024) # 处理接收的数据 message = data.decode() print('收到客户端消息:', message) time.sleep(240) # 模拟处理耗时 # 向客户端发送响应 response = 'OK' server_socket.sendto(response.encode(), client_address) print(f"已向 {client_address} 发送响应: {response}")
客户端实现与问题
方式一:直接收发
设置300秒超时以适配服务器240秒的响应延迟:
import socket # 创建UDP套接字 client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) client_socket.settimeout(300) # 服务器地址 server_address = ('192.168.100.2', 9910) # 向服务器发送数据 message = '来自客户端的问候!' client_socket.sendto(message.encode(), server_address) # 接收服务器响应 response, _ = client_socket.recvfrom(1024) # 处理响应 response_message = response.decode() print('收到服务器响应:', response_message) # 关闭套接字 client_socket.close()
方式二:循环接收
尝试通过循环+短超时的方式接收响应:
import logging _log = logging.getLogger(__name__) command_to_be_send = "flashIntel" client_socket = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) client_socket.settimeout(20) _log.info(f"通过UDP向设备发送命令: [{command_to_be_send}]") client_socket.sendto(command_to_be_send.encode(), ("192.168.100.2", 9910)) while True: response = None try: response, addr = client_socket.recvfrom(1024) except Exception as e: _log.info(e) pass if response: break response_text = response.decode().strip() _log.info(f"从 [{addr}] 收到响应: [{response_text}]") client_socket.close()
问题现象
- Linux环境:两种客户端实现均正常工作,服务器240秒后返回的"OK"能被成功接收。
- Windows环境:两种客户端都无法获取UDP响应,最终触发超时。但通过WireShark抓包可以确认,服务器返回的数据包已经到达客户端机器,只是代码无法读取到。
内容的提问来源于stack exchange,提问作者Hristiyan Andreev
相关产品推荐
相关产品推荐

