在Windows下创建简单的mqtt客户端

参考文章并感谢

https://blog.csdn.net/vincent_yuan89/article/details/84306001?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromMachineLearnPai2-2.channel_param

 

https://blog.csdn.net/weixin_37139197/article/details/78934961

这两个都是讲Linux下的不过对我的帮助很大

 

前言

       最近需要在Windows平台下开发一个简单的带界面的客户端与Mqtt代理通讯,以前都是在linux上面搞的,这回在Windows平台下还不太会了。

       本想着Qt应该是有对应的库,结果查来查去发现还需要自己去下载源码,去整到Qt里面,奈何技术太渣,实在没搞出来。希望高版本Qt可以自己加上库。

        一条路不通,就去找另一条,我决定还是使用paho.mqtt.c的源码来生成windows平台下的库。

 

前期准备

       工具1    CMake,这里软件是为了将下载得paho.mqtt.c的源码转换成windows下VS的项目,下载网址https://cmake.org/download/   这里要注意,最好就下msi版本,安装比较省事,如下图。

 

      工具2    paho.mqtt.c源码

                    下载网址   https://github.com/eclipse/paho.mqtt.c   (这个比较新)

                                      https://github.com/eclipse/paho.mqtt.c/tree/v1.3.0 

      

       工具3    Visual Studio  ,我这里使用的2015版本的

 

 

正式开始

 

    首先,下载好源代码,解压。在解压的目录下创建一个build文件夹。名字自己随便起,最好是英文。

    接着启动CMake程序,开始进行转换。如图,上面是框是源码的目录,下面的框是生成项目的目录,这就是创建一个build文件夹的原因。接着就点击左下方的Configure按钮。

如下图,我选择生成的工程为   VS2015   Win32  最后一个框我不知道干啥的,也没有填。然后点击Finish。

 

接着就是出现下图所示的画面,我没有改动什么,直接点击Generate按钮。

生成完毕后就可以单击OpenProject按钮了,到这里Windows下 的paho mqtt c的工程就创建好了。

 

打开工程项目后,你会发现解决方案资源管理器中有很多项目,我只用了 paho-mqtt3c  这个项目,这个是同步的,还有一个paho-mqtt3a是异步的,我就找了一个简单的来用。右键paho-mqtt3c项目点击生成,一般会成功啊,我试了好几次,都成功了,如果读者出现错误,请自寻解决方法。

成功生成也意味着相对应的mqtt的 .lib  和 .dll 文件也成功生成了,他们所在的位置是在上面创建的哪个build文件夹下的src目录下的Debug或Release目录下(取决于你生成时用的什么版本),我这里用的是Release版本的。

.dll文件是配合生成的.exe文件一同使用的(.dll放在.exe目录下)

.lib文件是在编译项目文件的时候用的

 

 

到这里就可以开始创建自己的Mqtt客户端项目了,我这里是使用VS2015做开发,先创建一个工程,能输出hello world的就行。

接着需要添加若干头文件,这些头文件都在paho.mqtt.c-master\paho.mqtt.c-master\src目录下,我目前用这几个就OK。

记得把头文件复制到自己项目的目录下,记得还有上面提到的一个paho-mqtt3c.lib文件也要复制到自己的项目目录下。

 

接着就是写代码,这里写了一个很简单的程序,可以连接Mqtt服务器并向服务器发送某个主题的消息。

#include <iostream>
#include "MQTTClient.h"               //引用mqtt的头文件
#include "MQTTClientPersistence.h"    //引用mqtt的头文件
#include "MQTTProperties.h"           //引用mqtt的头文件
#include <Windows.h>

using namespace std;
#pragma comment(lib, ".\\paho-mqtt3c.lib")  //加载的.lib文件


int MqttInit(MQTTClient * MqClientHandle, char * BrokerUrl, char * Username, char * Password, char * Clientid, unsigned int Timerval)

{

	int ret = 0;

	MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;

	MQTTClient * temp = MqClientHandle;

	ret = MQTTClient_create(temp, BrokerUrl, Clientid, MQTTCLIENT_PERSISTENCE_NONE, NULL);

	if (ret != MQTTCLIENT_SUCCESS)

	{

		return -1;

	}

	MqClientHandle = temp;

	if (Timerval > 7200) { Timerval = 7200; }

	if (Timerval < 30) { Timerval = 30; }



	conn_opts.username = Username;

	conn_opts.password = Password;

	conn_opts.cleansession = 1;

	conn_opts.connectTimeout = 15;

	conn_opts.keepAliveInterval = Timerval;



	ret = MQTTClient_connect(*MqClientHandle, &conn_opts);

	if (ret != MQTTCLIENT_SUCCESS)

	{

		return -1;

	}

	return 0;

}

int PushData(MQTTClient MqClientHandle, char* topic, void* data, int qos, unsigned int Timeout)

{

	int ret = 0;

	MQTTClient_message pubmsg = MQTTClient_message_initializer;

	MQTTClient_deliveryToken token = 0;

	if (qos < 0 || qos > 2) { qos = 0; }

	pubmsg.payload = data;

	pubmsg.payloadlen = strlen((const char *)data);

	std::cout << " send data size = " << pubmsg.payloadlen << std::endl;

	pubmsg.qos = qos;

	pubmsg.retained = 0;

	ret = MQTTClient_publishMessage(MqClientHandle, topic, &pubmsg, &token);

	if (MQTTCLIENT_SUCCESS != ret)

	{

		return -1;

	}



	ret = MQTTClient_waitForCompletion(MqClientHandle, token, Timeout);



	if (ret != MQTTCLIENT_SUCCESS)

	{

		return -1;

	}

	return 0;

}


int main()
{
	MQTTClient client;

	MqttInit(&client, "tcp://111.200.53.26:1883", "", "", "", 120);
	while (1)
	{
		PushData(client, "123", "123456", 0, 100);
		Sleep(1000);
	}

	return 0;
}

直接复制代码到你的.cpp文件上,编译,一般是能成功的啊,目前我还没遇到失败的。

在运行之前,记得把上面提到的.dll文件放到可执行文件(.exe)同一级目录下。这样运行才不会出错。

最后执行程序,结果如下,记得开启Mqtt的服务器啊。

程序正常运行,服务器也接收到了信息,图片是我用其他Mqtt客户端接收的服务器的信息。

 

 

将上面这一套东西搬到Qt上稍作修改也可以使用,头文件添加相同,就是.lib文件的引用不一样

LIBS += -LC:\Users\ThinkPad\Desktop\Qt_Mqtt_Client\MqttClientConfig -lpaho-mqtt3c  这里我是用的绝对路径

代码还是用上面的就行,当然得改啦,而且Qt的C++语法还挺严格,变量类型还得转换一下。

所以也可以用Qt创建Mqtt客户端了。

 

完结✿✿ヽ(°▽°)ノ✿

 

 

 

 

 

 

 

  • 2
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 6
    评论
### 回答1: MQTT客户端 for Window是一种在Windows操作系统上运行的MQTT协议的客户端软件。MQTT(Message Queuing Telemetry Transport)是一种轻量级的、开放的、基于发布/订阅的消息传输协议,常用于物联网(IoT)应用中。 MQTT客户端 for Window可以通过与MQTT代理服务器进行通信,实现设备之间的数据传输和通信。它具有以下特点: 1. 轻量级:MQTT协议非常轻量级,可以在带宽较低和计算能力有限的设备上运行,而不会造成过多的资源占用。 2. 简单易用:MQTT客户端 for Window提供了友好的用户界面,使用户可以方便地创建、配置和管理MQTT连接和订阅。 3. 灵活的发布/订阅模式:MQTT客户端 for Window基于发布/订阅模式,使得设备可以订阅感兴趣的主题(Topic),并接收来自其他设备或服务器的相应消息。 4. 可扩展性:MQTT客户端 for Window支持多种设备和平台,可以与各种硬件设备和操作系统兼容,具有很好的可扩展性。 5. 安全性:MQTT客户端 for Window支持MQTT协议的加密和数据传输的安全性,可以通过SSL/TLS协议进行安全通信。 总之,MQTT客户端 for Window是一种在Windows操作系统上运行的MQTT协议的客户端软件,它可以帮助用户轻松实现设备之间的通信和数据传输,非常适用于物联网应用场景。 ### 回答2: MQTT客户端是一种用于连接到MQTT代理服务器的应用程序,可以在Windows操作系统上运行。它允许用户通过MQTT协议与其他设备或应用程序进行实时的、双向的通信。 MQTT客户端可用于多种不同的应用场景,比如物联网(IoT)、传感器网络、远程监控等。它可以与各种设备进行通信,包括传感器、智能家居设备、工业控制器等。 在Windows上使用MQTT客户端,用户可以配置代理服务器的连接参数,如IP地址、端口号、订阅主题等。一旦与代理服务器建立连接,MQTT客户端可以发布(publish)和订阅(subscribe)消息。发布消息表示客户端向代理服务器发送消息,而订阅消息表示客户端接收代理服务器发布的消息。 MQTT客户端可以通过不同的方式实现,例如使用各种编程语言编的自定义应用程序,或者使用现有的MQTT客户端软件,如MQTT.fx、mosquitto_pub等。这些软件通常提供了直观的用户界面,方便用户进行操作和监控。 总之,MQTT客户端Windows操作系统上的使用非常灵活和方便,可以帮助用户轻松地构建与其他设备和应用程序之间的实时通信连接。它是物联网和传感器网络等领域中不可或缺的组件,为用户提供了许多有用的功能和服务。 ### 回答3: MQTT客户端是一种用于与MQTT(Message Queuing Telemetry Transport)代理服务器通信的应用程序。在Windows操作系统上,有许多不同的MQTT客户端可供选择,以满足不同用户的需求。 首先,Eclipse Paho是一个非常受欢迎的MQTT客户端,具有跨平台的特性,包括适用于Windows的版本。它提供了丰富的功能,使开发人员能够轻松地与MQTT代理服务器进行通信,包括发布和订阅消息、设置QoS(Quality of Service)级别、处理断开连接、处理消息保留等。 其次,HiveMQ是另一个流行的MQTT客户端,也提供了适用于Windows的版本。HiveMQ具有高度可扩展性和可靠性,并提供诸如消息路由、消息处理、会话管理等高级功能。它还支持一些高级协议和功能,如MQTT 5.0、请求/响应模式等。 此外,有一些其他适用于WindowsMQTT客户端,如MQTT.fx、MQTT Explorer等,它们提供了直观的图形用户界面,用于连接和交互。这些客户端通常支持易于配置的用户界面、消息发布/订阅、主题过滤等基本功能,以及一些高级功能,如SSL/TLS安全连接、多个代理服务器支持等。 无论选择哪个MQTT客户端,用户都可以根据自己的需求和偏好来决定。这些客户端都提供了易于使用的界面和强大的功能,使得使用MQTT协议进行通信变得更加方便和灵活。无论是开发人员还是普通用户,都可以通过这些客户端享受到MQTT技术所带来的便利和强大能力。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值