I'm using the embedded C/C++ variant of the PAHO-project out of a microcontroller. My Problem: although the data are sent (can be verified with WireShark), a broker these data sent to does not recognise them and does not show the related data. This was testedwith HiveMQ and BevyWise MQTTRoute.
This is what I'm doing to create and send a message (pseudo-code due to some microcontroller-specific function calls):
MQTTSNPacket_connectData data="">
int rc=0,payloadlen,len;
unsigned char buf[MAX_BUFLEN+1];
MQTTSN_topicid topic;
char payload[200+1];
char id[200+1];
--> open a TCP/IP conection to the broker here
data.clientID.cstring=(char*)m_machineID->c_str(); // get identifier from std::string
data.cleansession=1;
len = MQTTSNSerialize_connect(buf,MAX_BUFLEN,&data);
topic.data.long_.name=(char*)topicData->c_str(); // get the topic data
topic.data.long_.len=strlen(topic.data.long_.name);
strncpy(payload,payData->c_str(),200); // get the data to be sent
payloadlen=strlen(payload);
len+=MQTTSNSerialize_publish(buf+len,MAX_BUFLEN-len,0,3,0,0,topic,(unsigned char*)payload,payloadlen);
// here the fourth parameter has to be "3", when setting it to "0", the topic does not become part
// of the data in "buf"
len+=MQTTSNSerialize_disconnect(buf+len,MAX_BUFLEN-len,200);
--> send the data in "buf" with the length "len" here - this is successful
--> close the TCP/IP connection to the broker here