python - 在 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
解决方案
我认为您只是在使用 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 将在几个月后变得不受支持
推荐阅读
- java - 如何在 JBoss EAP 7.2 上运行的 EJB 服务器中获取连接的 EJB 客户端详细信息
- java - 在使用 MongoTemplate 时,有没有一种方法可以在不返回任何内容的情况下保存实体?
- github - github 操作排除来自分支的拉取请求
- python - 如何解决这个复杂的编码面试问题?
- clojure - 如何在从 deps.edn 运行 -M 或 -X 之前编译所有源代码和测试?
- c - rpi3 中的数组是否具有不同的 w/ 和 w/o GCC 对齐属性?
- db2 - 在雪花中处理继续和退出处理程序
- algorithm - 加密 P2p 交易确实需要订单簿或媒人
- python - Unable to Identify all the when web scraping a table
- c# - C# 集合初始化器如何工作?