eclipse-paho / paho.mqtt.cpp

Other
1.04k stars 440 forks source link

C++ Websocket sends Invalid data #373

Open yuvarajvelumani opened 2 years ago

yuvarajvelumani commented 2 years ago

Hi,

MQTT C Lib Version: v1.3.8 MQTT C++ Version: v1.2.0 JSONCPP Version: 1.9.3

Tool Used: MQTT Explorer and MQTT Lens

I had configured mosquitto broker to support both MQTT and WebSocket protocol Snippet from mosquitto.conf

listener 1883 protocol mqtt allow_anonymous true

listener 9090 protocol websockets allow_anonymous true

I am trying to send Json message via the websocket (unsecured) using the host address "ws://localhost:9090". The JSON message looks fine with clear formatting and indentation, but on the Tool side I could see all Gibberish characters. The same code works perfectly fine when configured as MQTT protocol.

Also I am using MQTT JavaScript for a simple UI (html based), which gets disconnected when a invalid json message is received.

Could anyone help me ASAP.

If there is any websocket based example available, please refer to me. I appreciate your help.

Original Message: { "version" : 1.0, "timestamp" : "2022-01-04T01:30:52.399Z", "sender" : "printservice", "data" : { "id" : "1", "name" : "Print Label", "procotol" : "ESC/Label", "servicename" : "epsonprintservice", "txt" : "Epson Printer", "model" : "modelname", "type" : "destination", "extension" : "*.prn", "printoption" : [ { "id" : "1", "name" : "printoption", "text" : "Print Option", "option" : "label | line" } ], "commsettings" : [ { "id" : "1", "name" : "Serial", "config" : "", "port" : "COM1 | COM2 | COM3", "options" : "", "enabled" : "false" }, { "id" : "2", "name" : "Ethernet", "ip" : "", "port" : "", "options" : "", "enabled" : "true" } ], "sourcedevents" : [ { "id" : "1", "event" : "labelsettings", "display" : "Label Settings", "resultevent" : "printlabel_settings" } ], "usercommands" : [ { "id" : "1", "resultevent" : "reprintlabel", "display" : "Reprint" } ] } }

At MQTT Explorer: ����������������������������������������������������������������������������������������������������Ԧ������������������������������������������������������������򑼿��������������������������������������������������������������������������������������������������������������������������������������������󭯳�����������������������Ԇ���Ԧ����������������������������������������������������������������������������������������������������������Ԡ��Ԁ�����������������������Ԇ���Ԧ��������������������������������������������������������������������������������������������������������������������������������������������Ԡ����Ԧ�����������������������������������������������������������������������������������������������������������������������Ԡ��Ԁ������������������������Ԇ���Ԧ������������������������������������������������������������������������������������������������������������������������������Ԡ��Ԁ�����������������������Ԇ���Ԧ���������������������������������������������������������������������������������Ԡ��Ԁ�Ԡנ

C++ Code Snippet: mqtt::async_client* m_mqttClient = new mqtt::async_client("ws://localhost:9090, "cli-sample", 120); mqtt::connect_options m_mqttConnOptions = mqtt::connect_options_builder() .keep_alive_interval(120* seconds(5)) .clean_session(true) .automatic_reconnect(seconds(2), seconds(30)) .finalize(); m_mqttClient->publish(topic, JsonString, 0, false)->try_wait(); -Thanks

tllngr commented 2 years ago

I had same issue. Seems to be a bug at paho.c which was fixed in v1.3.9. See: https://github.com/eclipse/paho.mqtt.c/pull/1090

After upgrading to paho.c v1.3.9 it worked. v1.3.10 also works

So the combination

MQTT C Lib Version: v1.3.9/v1.3.10 MQTT C++ Version: v1.2.0

works for me