我正在尝试在 Raspberry Pi2 中使用 MQTT mosquitto 代理(pub 和 sub)发送 jpg 图像。
这是我的 python 代码 pub.py(已修改)
import paho.mqtt.client as mqtt
def on_publish(mosq, userdata, mid):
mosq.disconnect()
client = mqtt.Client()
client.connect("test.mosquitto.org", 1883, 60)
client.on_publish = on_publish
f=open("b.jpg", "rb") #3.7kiB in same folder
fileContent = f.read()
byteArr = bytearray(fileContent)
client.publish("image",byteArr,0)
client.loop_forever()
它是 sub.py(modified)
import paho.mqtt.client as mqtt
def on_connect(client, userdata, rc):
print("Connect" + str(rc))
client.subscribe("image")
def on_message(client, userdata, msg):
print "Topic : ", msg.topic
f = open("/tmp/output.jpg", "w") #there is a output.jpg which is different
f.write(msg.payload)
f.close()
client = mqtt.Client()
client.on_connect = on_connect
client.on_message = on_message
client.connect("test.mosquitto.org", 1883, 60)
client.loop_forever()
我的 python 版本是 2.7.9。
在我解决了一些错误之后,它似乎有效但没有。
当我实现 sub.py 时,它连接成功,所以我在其他终端中实现了 pub.py。
但是,没有连接消息“连接结果代码 0”没有任何反应
没有错误消息,所以我不知道我的错误是什么。
原文由 ahnstar 发布,翻译遵循 CC BY-SA 4.0 许可协议
在 _sub.py 中_,您有 2 个
on_public
函数,应分别重命名为on_connect
和on_publish
。在 _pub.py 中_,您需要在客户端实际设置
on_publish
方法,以便在发布完成后调用它。正如@ralight 在他对您之前问题的回答中指出的那样,您应该将
client.loop(5)
更改为client.loop_forever()
由于mosq.disconnect()
而发送消息后它仍然会退出---