Не удается отправить байтовый массив через paho-mqtt client.publi sh (). Ошибка сокета - PullRequest
1 голос
/ 08 апреля 2020

Я пытаюсь отправить изображение через paho-mqtt. Я могу отправить простую строку через client.publi sh () или если не использовать paho.client -> client.publi sh (), но publi sh .single () мой bytearray.

При попытке отправить bytearray с client.publi sh () я получаю ошибку сокета на моем брокере, и он не отправляет мое сообщение (нет вызова on_publi sh). Чего мне не хватает?

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

1 Ответ

1 голос
/ 08 апреля 2020

Как указано в комментариях

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() не работает, заключается в том, что это блокирующий вызов, который никогда не возвращается, поэтому предполагается, что вы вставили его перед вызовом client.publish() ты никогда не доберешься туда.

...