【问题标题】:How to send UDP client message in smart way to the UDP server parse the message如何以智能方式将 UDP 客户端消息发送到 UDP 服务器解析消息
【发布时间】:2016-08-13 18:35:01
【问题描述】:

我在 PyQT(UDP 客户端)中有一个应用程序,它通过 UDP/IP 将一些参数发送到 raspberry(UDP 服务器)上的应用程序。

此 Qt 应用程序有多个字段,如 PID 参数、电机速度、传感器预设等。

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

它可以工作,但它并不聪明,所有参数都被发送,即使一个参数没有改变。

什么应该是只发送特定参数而不依赖于正确顺序的聪明方法?还是只有改变的?

也许一些封装在 UDP 消息上的协议?

【问题讨论】:

  • 这个问题感觉不太适合这个论坛。您可能会收到仅由意见支持的答复,每个答复都同样有效。话虽如此,我会使用 JSON,所以我的消息看起来像 {'x':142,'y':10,'attitude':negative','outlook':'positive'}
  • @Robᵩ 单引号字符串是不是标准 JSON。一些解码器允许它们,但这并不意味着你应该故意提倡生成这样的 JSON 输出。您的消息示例应为{"x":142,"y":10,"attitude":"negative","outlook":"positive"}
  • @KubaOber - 你是对的。谢谢。

标签: python qt sockets udp protocols


【解决方案1】:

如果您真的想保持简单并尽可能少地更改现有代码,您可以为具有未更改值的参数包含空值。例如。如果你有四个参数,那么假设它们都改变了你会发送142,10,2,negative,positive,但如果只有前两个改变了你会发送142,10,,。但是,恕我直言,不鼓励这种临时方案。

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2017-07-30
    • 1970-01-01
    • 1970-01-01
    • 2017-09-23
    • 2012-03-06
    • 1970-01-01
    • 1970-01-01
    • 2015-07-13
    相关资源
    最近更新 更多