You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.
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()