import asyncio import socket UDP_IP = "0.0.0.0" # 监听所有网络接口 UDP_PORT = 8887 def hex_to_dec_meters(hex_str): # 将十六进制字符串转换为十进制整数 decimal_value = int(hex_str, 16) # 将毫米转换为米,并保留小数点后三位 meters = round(decimal_value / 1000, 3) return meters async def getOnce(): try: socket.timeout(1) sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM) sock.bind((UDP_IP, UDP_PORT)) sock.settimeout(1) data, addr = await asyncio.get_event_loop().run_in_executor(None, sock.recvfrom, 1024) decoded_data = data.decode('utf-8') # 解码收到的数据(假设是UTF-8编码) # 在此处解析数据并输出相应字段 # 例如,根据您提供的通信数据例子,您可以解析不同字段的值 parts = decoded_data.split(' ') if parts[0] == 'mc' and len(parts) == 15: # 提取示例中的各个字段 head = parts[0] user = parts[1] range0 = parts[2] range0_meters = hex_to_dec_meters(range0) if range0_meters>=2: return "" # range1 = parts[3] # range2 = parts[4] # range3 = parts[5] # range4 = parts[6] # range5 = parts[7] # range6 = parts[8] # range7 = parts[9] # nranges = parts[10] # rseq = parts[11] # rangtime = parts[12] ridt_ida = parts[13] # diagnosis = parts[14] # 在这里可以使用解析后的数据进行处理或打印输出 sock.close() return ridt_ida except socket.timeout: print("未接收到数据或超时") return "" # 关闭套接字(这部分代码可能需要在适当的时候调用) # sock.close()