无法通过 paho-mqtt client.publish() 发送字节数组。套接字错误
Can't send bytearray via paho-mqtt client.publish(). Socket error
我正在尝试通过 paho-mqtt 发送图像。我可以通过 client.publish() 发送一个简单的字符串,或者在不使用 paho.client -> client.publish() 时发送一个简单的字符串,但是 publish.single() 我的字节数组。
尝试使用 client.publish() 发送字节数组时,我的代理出现套接字错误,它没有发送我的消息(没有 on_publish 调用)。我错过了什么?
client = paho.Client()
client.on_connect = on_connect
client.on_publish = on_publish
client.connect(MQTT_BROKER, MQTT_PORT)
f = open("foo.jpg", "rb")
fileContent = f.read()
f.close()
byteArr = bytearray(fileContent)
client.publish("/data", byteArr) # only works with strings. socket error on broker when using bytearray
# publish.single("/data", byteArr, hostname=MQTT_BROKER) # works with string and bytearray
如评论中所述
def on_publish(client, userdata, mid):
client.disconnect()
client.stop_loop()
client = paho.Client()
client.on_connect = on_connect
client.on_publish = on_publish
client.connect(MQTT_BROKER, MQTT_PORT)
client.loop_start()
f = open("foo.jpg", "rb")
fileContent = f.read()
f.close()
byteArr = bytearray(fileContent)
client.publish("/data", byteArr)
client.loop_forever()
不起作用的原因是因为这是一个永远不会 returns 的阻塞调用,所以假设您在调用 client.publish()
之前插入它,您将永远不会到达那里.
我正在尝试通过 paho-mqtt 发送图像。我可以通过 client.publish() 发送一个简单的字符串,或者在不使用 paho.client -> client.publish() 时发送一个简单的字符串,但是 publish.single() 我的字节数组。
尝试使用 client.publish() 发送字节数组时,我的代理出现套接字错误,它没有发送我的消息(没有 on_publish 调用)。我错过了什么?
client = paho.Client()
client.on_connect = on_connect
client.on_publish = on_publish
client.connect(MQTT_BROKER, MQTT_PORT)
f = open("foo.jpg", "rb")
fileContent = f.read()
f.close()
byteArr = bytearray(fileContent)
client.publish("/data", byteArr) # only works with strings. socket error on broker when using bytearray
# publish.single("/data", byteArr, hostname=MQTT_BROKER) # works with string and bytearray
如评论中所述
def on_publish(client, userdata, mid):
client.disconnect()
client.stop_loop()
client = paho.Client()
client.on_connect = on_connect
client.on_publish = on_publish
client.connect(MQTT_BROKER, MQTT_PORT)
client.loop_start()
f = open("foo.jpg", "rb")
fileContent = f.read()
f.close()
byteArr = bytearray(fileContent)
client.publish("/data", byteArr)
client.loop_forever()
不起作用的原因是因为这是一个永远不会 returns 的阻塞调用,所以假设您在调用 client.publish()
之前插入它,您将永远不会到达那里.