首页 > 解决方案 > 在 Python 上解析 UDP 接收到的数据

问题描述

我正在编写一个通过 UDP 接收数据的类比遥控器。接收方正在运行 python3 来分析接收到的数据。我想提取特定数据并将其存储在变量中。接收到的数据格式如下:

{RX: SIGNED INTEGER VALUE, RY: SIGNED INTEGER, LX: SIGNED INTEGER,
 LY: SIGNED INTEGER}

问题是来自缓冲区数据的值没有被赞助,并且在 -255,0 和 255 之间变化。有没有办法将这些传入变量存储到 Python 变量中,即使整数没有像 -000、255 或 -255 这样被赞助?

数据以 100 毫秒的间隔从虚拟操纵杆传来。

import socket
UDP_IP = "127.0.0.1"
UDP_PORT = 5005

sock = socket.socket(socket.AF_INET, # Internet
                     socket.SOCK_DGRAM) # UDP
sock.bind((UDP_IP, UDP_PORT))

while True:
data, addr = sock.recvfrom(1024) # buffer size is 1024 bytes
print "received message:", data

# Example received data: {RX:, -123, RY:, 321, LX:, 0, LY:, 10}

RX = "extracted integer from packet" # From example int -123
RY = "extracted integer from packet" # From example int 321
LX = "extracted integer from packet" # From example int 0
LY = "extracted integer from packet" # From example int 10

标签: pythonparsingudp

解决方案


我认为您只是在使用 JSON 解析器,例如:

import socket
import json

sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
sock.bind((UDP_IP, UDP_PORT))

while True:
    data, addr = sock.recvfrom(1024)
    print('received data', data)

    msg = json.loads(data.decode('ascii'))
    print('parsed message', msg)

    print('LX =', msg['LX'])

请注意,我使用的是 Python 3 语法,因为 Python 2 将在几个月后变得不受支持


推荐阅读