2016-04-20 50 views
1

我在PyQT(UDP客户端)中有一个应用程序,它通过UDP/IP将一些参数发送到树莓派(UDP服务器)上的应用程序。如何以智能的方式向UDP服务器发送UDP客户端消息解析消息

这个Qt应用程序有几个领域,如PID参数,电机的速度,传感器预设等。

实际上,UDP客户端通过从QT应用程序中的每个字段获取值并将数据附加到具有分隔符(',')的字符串,始终以相同的顺序发送字符串。例如,“142.0,10.0,2.0,否定,正面”。
UDP服务器收到此消息,拆分消息并将列表中的每个项目移动到相应的变量。

它可以工作,但它不聪明,即使参数没有改变,所有参数也会被发送。

什么应该是聪明的方式发送只有特定的参数,而不取决于正确的序列?或只有变化的?

也许某些封装协议通过UDP消息?

+2

这个问题感觉不太适合这个论坛。您很可能会收到仅由意见支持的答复,每个答案同样有效。尽管如此,我会使用JSON,因此我的消息看起来像'{'x':142,'y':10,'态度':负面','outlook':'正面'} –

+0

@RobᵩSingle-引用的字符串是*不是*标准的JSON。一些解码器允许它们,但这并不意味着你应该在知情的情况下提倡产生这种JSON输出。您的留言示例应为“{”x“:142,”y“:10,”态度“:”负面“,”展望“:”正面“}。 –

+0

@KubaOber - 你是对的。谢谢。 –

回答

1

如果您真的想保持简单并将现有代码更改为最少,则可以为参数包含空值,但值不会更改。例如。如果你有四个参数,那么假设他们都改变了,你会发送142,10,2,negative,positive,但如果只有前两个参数发生变化,你会发送142,10,,。但是,这样的特别计划应该是恕我直言,不鼓励。

你可以使用json与非常短的成员字符串。例如。 {"a":142,"b":10}。您必须在短字符串键和它们与数据分开的含义之间保留一个人类可读的映射。由于字符串可以是任何Unicode字符,因此在用完单个字符之前,您还有很长的路要走。另外,Python natively supports json

如果您不太在意数据包的长度,那么您甚至不需要短成员字符串:通过使用有意义的字符串(例如{"velocity":142,"acceleration":10})使您的数据包自行记录。

相关问题