Ich benutze Paho-Client-Bibliotheken für C, um einen Client zu schreiben, der eine ganze Zahl an den Mosquitto-Broker veröffentlicht. Wenn ich die Nutzlast als Zeichenfolge festlege, wird sie ohne Probleme veröffentlicht, aber wenn ich die Nutzlast auf eine Ganzzahl setze, stürzt der Herausgeber mit der folgenden Meldung ab, wie im Bild gezeigt.Mosquitto-Verlag veröffentlicht keine Ganzzahlen in C
Mein Client-Code ist wie folgt:
#include "stdio.h"
#include "stdlib.h"
#include "string.h"
#include "MQTTClient.h"
#define ADDRESS "tcp://localhost:1883"
#define CLIENTID "ExampleClientPub"
#define TOPIC "MQTT Examples"
#define QOS 1
#define TIMEOUT 10000L
int main(int argc, char* argv[])
{
MQTTClient client;
MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
MQTTClient_message pubmsg = MQTTClient_message_initializer;
MQTTClient_deliveryToken token;
int rc, ch;
int i = 4;
MQTTClient_create(&client, ADDRESS, CLIENTID,
MQTTCLIENT_PERSISTENCE_NONE, NULL);
conn_opts.username = "user";
conn_opts.password = "hello";
conn_opts.keepAliveInterval = 65000;
conn_opts.cleansession = 1;
if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
{
printf("Failed to connect, return code %d\n", rc);
exit(-1);
}
pubmsg.payload = i;
pubmsg.payloadlen = sizeof(i); //strlen(PAYLOAD);
pubmsg.qos = QOS;
pubmsg.retained = 0;
MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token);
printf("Waiting for up to %d seconds for publication of %d\n"
"on topic %s for client with ClientID: %s\n",
(int)(TIMEOUT/1000), i, TOPIC, CLIENTID);
rc = MQTTClient_waitForCompletion(client, token, TIMEOUT);
printf("Message with delivery token %d delivered\n", token);
do
{
ch = getchar();
} while (ch != 'Q' && ch != 'q');
MQTTClient_disconnect(client, 10000);
MQTTClient_destroy(&client);
return rc;
}
Kann mir jemand bitte sagen, was ich falsch mache?
'pubmsg.payloadlen = sizeof (i);' ist verdächtig, warum die Größe von 'i'? – chux
@chux 'payloadlen' beschreibt die Größe der Nutzdaten in Bytes. Da ich eine einzelne Integer-Payload sende, sollte das nicht funktionieren? –
Detail: "Wenn ich die Nutzlast als eine Zeichenfolge festlegen, veröffentlicht es ohne Probleme, aber wenn ich die Nutzlast auf eine Ganzzahl festlegen," legt Code Payload auf die _Adresse_ einer Zeichenfolge. Wie weiß das empfangende Publishing, dass es eine Adresse eines Strings im Vergleich zu einem "Int" erhält? – chux