Qt的qtmqtt库连接onenet出现QMQTT::SocketRemoteHostClosedError解决方法

本文主要是介绍Qt的qtmqtt库连接onenet出现QMQTT::SocketRemoteHostClosedError解决方法,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

问题描述

在Qt发开过程中使用qtmqtt库来连接onenet的mqtt服务器,在ClientId、Username和Password均填写正确的情况下还是连接不上,查看错误显示QMQTT::SocketRemoteHostClosedError

解决方法

client中的CleanSession标志位必须设置为true

    client = new QMQTT::Client;client->setHostName("183.230.40.96");  // 服务器IPclient->setPort(1883);      // 服务器端口client->setClientId("XXX"); // 设备名称client->setUsername("XXX"); // 产品IDclient->setPassword("XXX"); // 鉴权信息,使用Token工具生成client->setVersion(QMQTT::MQTTVersion::V3_1_1);  // 设置MQTT协议版本client->setKeepAlive(60);                        // 设置保持连接时间client->setCleanSession(true);                   // 设置会话标志为true

分析过程

排除环境问题和qtmqtt库问题

  • 在主机中下载MQTTX工具,使用MQTTX连接onenet服务器。-> 连接成功
  • 使用qtmqtt库来连接主机内自己搭建的mosquittoMQTT服务器。-> 连接成功

使用Wireshark工具抓包来分析报文内的信息

  • qtmqtt库连接onenet服务器发送的报文如下图所示:
    qtmqtt连接onenet
  • MQTTX工具连接onenet服务器发送的报文如下图所示:
    在这里插入图片描述
    显而易见qtmqtt库最后发送FIN, ACK意味着断开连接,而MQTTX工具最后一个报文发送ACK表示成功建立连接,紧接着分析MQTT协议中的内容。
  • 以下为qtmqtt库发送报文中MQTT协议中的内容:
    在这里插入图片描述
  • 以下为MQTT工具发送报文中MQTT协议中的内容:
    在这里插入图片描述
    从上图可以发现两者的MQTT协议中只有Clean Session Flag Set这个标志位是不同的,那么原因就找到了,连接onenet的MQTT服务器必须将Clean Session Flag Set标志位设置为1。那么在Qt中增加clinet->setCleanSession(true);就可以解决这个问题,成功连接上onenet的MQTT服务器了。

这篇关于Qt的qtmqtt库连接onenet出现QMQTT::SocketRemoteHostClosedError解决方法的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/942587

相关文章

Idea实现接口的方法上无法添加@Override注解的解决方案

《Idea实现接口的方法上无法添加@Override注解的解决方案》文章介绍了在IDEA中实现接口方法时无法添加@Override注解的问题及其解决方法,主要步骤包括更改项目结构中的Languagel... 目录Idea实现接China编程口的方法上无法添加@javascriptOverride注解错误原因解决方

MySql死锁怎么排查的方法实现

《MySql死锁怎么排查的方法实现》本文主要介绍了MySql死锁怎么排查的方法实现,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录前言一、死锁排查方法1. 查看死锁日志方法 1:启用死锁日志输出方法 2:检查 mysql 错误

Java通过反射获取方法参数名的方式小结

《Java通过反射获取方法参数名的方式小结》这篇文章主要为大家详细介绍了Java如何通过反射获取方法参数名的方式,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 目录1、前言2、解决方式方式2.1: 添加编译参数配置 -parameters方式2.2: 使用Spring的内部工具类 -

c++中std::placeholders的使用方法

《c++中std::placeholders的使用方法》std::placeholders是C++标准库中的一个工具,用于在函数对象绑定时创建占位符,本文就来详细的介绍一下,具有一定的参考价值,感兴... 目录1. 基本概念2. 使用场景3. 示例示例 1:部分参数绑定示例 2:参数重排序4. 注意事项5.

Windows设置nginx启动端口的方法

《Windows设置nginx启动端口的方法》在服务器配置与开发过程中,nginx作为一款高效的HTTP和反向代理服务器,被广泛应用,而在Windows系统中,合理设置nginx的启动端口,是确保其正... 目录一、为什么要设置 nginx 启动端口二、设置步骤三、常见问题及解决一、为什么要设置 nginx

java如何通过Kerberos认证方式连接hive

《java如何通过Kerberos认证方式连接hive》该文主要介绍了如何在数据源管理功能中适配不同数据源(如MySQL、PostgreSQL和Hive),特别是如何在SpringBoot3框架下通过... 目录Java实现Kerberos认证主要方法依赖示例续期连接hive遇到的问题分析解决方式扩展思考总

树莓派启动python的实现方法

《树莓派启动python的实现方法》本文主要介绍了树莓派启动python的实现方法,文中通过图文介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧... 目录一、RASPBerry系统设置二、使用sandroidsh连接上开发板Raspberry Pi三、运

查询SQL Server数据库服务器IP地址的多种有效方法

《查询SQLServer数据库服务器IP地址的多种有效方法》作为数据库管理员或开发人员,了解如何查询SQLServer数据库服务器的IP地址是一项重要技能,本文将介绍几种简单而有效的方法,帮助你轻松... 目录使用T-SQL查询方法1:使用系统函数方法2:使用系统视图使用SQL Server Configu

Python给Excel写入数据的四种方法小结

《Python给Excel写入数据的四种方法小结》本文主要介绍了Python给Excel写入数据的四种方法小结,包含openpyxl库、xlsxwriter库、pandas库和win32com库,具有... 目录1. 使用 openpyxl 库2. 使用 xlsxwriter 库3. 使用 pandas 库

SpringBoot中的404错误:原因、影响及解决策略

《SpringBoot中的404错误:原因、影响及解决策略》本文详细介绍了SpringBoot中404错误的出现原因、影响以及处理策略,404错误常见于URL路径错误、控制器配置问题、静态资源配置错误... 目录Spring Boot中的404错误:原因、影响及处理策略404错误的出现原因1. URL路径错