QMqttClient客户端,pub消息后,其他客户端收不到,其他客户端只能收到Will Message

十八道胡同 2019-12-09 09:34:17
我从github下载的源码,然后编译成功后使用,调用代码如下,消息发布后publish_code 是大于0的,但是其他订阅了此消息的客户端收不到消息,但可以收到goodbye gantry的遗言,这个是为啥?

 if(m_mqttclient == NULL)
{
m_mqttclient = new QMqttClient();
}

if (m_mqttclient->state() == QMqttClient::Disconnected)
{
m_mqttclient->setHostname(centerip);
m_mqttclient->setPort(1883);
m_mqttclient->setUsername("front");
m_mqttclient->setPassword("front");
m_mqttclient->setClientId("we_are_gantry_front");
m_mqttclient->setProtocolVersion(QMqttClient::MQTT_3_1);
m_mqttclient->setKeepAlive(120);
m_mqttclient->setCleanSession(1);

m_mqttclient->setWillMessage("goodbye gantry");
m_mqttclient->setWillTopic("11/22/33");
m_mqttclient->setWillQoS(2);
m_mqttclient->setWillRetain(true);

m_mqttclient->connectToHost();
qDebug()<<centerip<<"mqtt connect";
}
if(m_mqttclient->state() == QMqttClient::Connected)
{
QString publish_topic=QString("%1/%2).arg(province_id).arg(ii);
int publish_code = m_mqttclient->publish(publish_topic,msg.toUtf8(),2,true);
qDebug()<<publish_topic<<msg<<publish_code;
}else{
qDebug()<<centerip<<"mqtt not connect";
}
...全文
1002 12 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
小岗哥哥 2019-12-31
  • 打赏
  • 举报
回复
引用 11 楼 LCL_data 的回复:
[quote=引用 10 楼 小岗哥哥 的回复:] 真是搞笑 上面的回答都是答非所问, 我告诉你真正的原因,官方例子之所以能用,你的不能用,是因为官方的例子是图形界面的,发布订阅都是按键响应函数中实现的,我之前 也踩过这个坑,对比了下,写了个timer 延后处理,就可以了。 当然,timer只是为了排除问题,规范的写法是client的 connectted信号收到以后,在响应槽函数中实现。
非常感谢回复,调试的时候的确发现,他有时连接状态是连接中。 我试下,谢谢。[/quote] 不客气。
十八道胡同 2019-12-31
  • 打赏
  • 举报
回复
引用 10 楼 小岗哥哥 的回复:
真是搞笑 上面的回答都是答非所问, 我告诉你真正的原因,官方例子之所以能用,你的不能用,是因为官方的例子是图形界面的,发布订阅都是按键响应函数中实现的,我之前 也踩过这个坑,对比了下,写了个timer 延后处理,就可以了。 当然,timer只是为了排除问题,规范的写法是client的 connectted信号收到以后,在响应槽函数中实现。
非常感谢回复,调试的时候的确发现,他有时连接状态是连接中。 我试下,谢谢。
小岗哥哥 2019-12-19
  • 打赏
  • 举报
回复
真是搞笑
上面的回答都是答非所问,
我告诉你真正的原因,官方例子之所以能用,你的不能用,是因为官方的例子是图形界面的,发布订阅都是按键响应函数中实现的,我之前
也踩过这个坑,对比了下,写了个timer 延后处理,就可以了。
当然,timer只是为了排除问题,规范的写法是client的 connectted信号收到以后,在响应槽函数中实现。
十八道胡同 2019-12-12
  • 打赏
  • 举报
回复
引用 6 楼 huo5896324 的回复:
是不是你发布的主题,没有被订阅?
谢谢回复。 发布的主题和WillMessage 都是11/开头的, 我是用11/#来订阅的。 应该不是这个问题。
十八道胡同 2019-12-12
  • 打赏
  • 举报
回复
引用 8 楼 huo5896324 的回复:
if(m_mqttclient->state() == QMqttClient::Connected) { QString publish_topic=QString("%1/%2) 你贴的代码这里少了个双引号,你代码里没少吧?
谢谢回复。 代码里面没少。
huo5896324 2019-12-12
  • 打赏
  • 举报
回复
if(m_mqttclient->state() == QMqttClient::Connected)
{
QString publish_topic=QString("%1/%2)
你贴的代码这里少了个双引号,你代码里没少吧?
huo5896324 2019-12-11
  • 打赏
  • 举报
回复
是不是你发布的主题,没有被订阅?
不易易 2019-12-10
  • 打赏
  • 举报
回复
给个下载链接看看
十八道胡同 2019-12-10
  • 打赏
  • 举报
回复
引用 1 楼 donwmufromdying 的回复:
光看不完整的代码不太能看出问题。建议你先看看Qt官方的自带例子。 https://doc.qt.io/QtMQTT/qtmqtt-examples.html
谢谢回复。这个是调用mqtt所有的代码了 broker用的是mosquitto,mosquitto里面不允许匿名访问,对用的用户名密码已经加好。
donwmufromdying 2019-12-10
  • 打赏
  • 举报
回复
光看不完整的代码不太能看出问题。建议你先看看Qt官方的自带例子。 https://doc.qt.io/QtMQTT/qtmqtt-examples.html
十八道胡同 2019-12-10
  • 打赏
  • 举报
回复
引用 4 楼 donwmufromdying 的回复:
想下来试试。结果我发现我的Qt没有mqqt,这个模块应该是Qt5.13商业版本才有吧?
我的是5.12版本。 我的mqtt是我用github的源码自己编译的
donwmufromdying 2019-12-10
  • 打赏
  • 举报
回复
想下来试试。结果我发现我的Qt没有mqqt,这个模块应该是Qt5.13商业版本才有吧?

16,817

社区成员

发帖
与我相关
我的任务
社区描述
Qt 是一个跨平台应用程序框架。通过使用 Qt,您可以一次性开发应用程序和用户界面,然后将其部署到多个桌面和嵌入式操作系统,而无需重复编写源代码。
社区管理员
  • Qt
  • 亭台六七座
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧