通过 MQTT 代理从 android 客户端向所有客户端发送 MQTT 消息

Send MQTT message from the android client to all the clients through MQTT broker

我需要 MQTT 代理将从 Android 客户端接收到的 MQTT 消息发布到所有其他客户端,因此在消息正文中添加了 mosquitto pub 命令。

publish(client,"mosquitto_pub -h 192.34.63.138 -t fromApp -m "Turn" -d ");

给出错误“无法解析符号“Turn”和 ; or ) expected”。

更新

后来我理解正确了。我实际上需要将来自 android 客户端的 MQTT 消息发送给所有其他客户端,所以我认为在消息正文中包含 publish 关键字,这是完全错误的。 MQTT本身将收到的消息发送给所有提供的客户端,如果客户端已经订阅了那个topic.Hopefully,它将帮助其他读者。

你的方法有很多问题。

首先,编译时错误是因为您在字符串中嵌套了 "(由 " 绑定。为此,您需要对 " 进行转义\ 如下:

"mosquitto_pub -h 192.34.63.138 -t fromApp -m \"Turn\" -d "

第二个问题比较重要。 MQTT 并不像您期望的那样工作。

您不向代理发送命令以使其执行,您从一个客户端向主题发布一条消息,然后代理将该消息传递给已订阅该主题的所有客户端。因此,在这种情况下,您只需将负载为 Turn 的消息发布到主题 fromApp。这看起来像:

MqttMessage message = new MqttMessage("Turn".getBytes());
sampleClient.publish("fromApp", message);