VC MFC C++ MQTT VC编译MQTT VC调用MQTT dll eclipse-paho-mqtt

25 篇文章 3 订阅
订阅专栏
4 篇文章 2 订阅
订阅专栏

VC MFC C++ MQTT VC编译MQTT VC调用MQTT dll eclipse-paho-mqtt

JS HTML Web端使用MQTT通讯测试

Android Studio MQTT 使用测试 eclipse.paho.mqtt

系统:Windows10 64位

开发环境:Visual Studio 2013 64位

MQTT源码库:eclipse-paho-mqtt-c-src-1.2.0

测试工具:MQTTBox

MQTT服务器:阿里云部署EMQX

VC MFC程序运行图示:

一、编译MQTT 生成dll lib

1、下载MQTT源码库:eclipse-paho-mqtt-c-src

      下载 github地址: https://github.com/eclipse

2、解压、使用Visual Studio编译出动态链接库

      解压eclipse-paho-mqtt-c-src

3、使用Visual Studio编译dll/lib

打开目录eclipse-paho-mqtt-c-src-1.2.0\Windows Build中的Paho C MQTT APIs.sln工程

使用VS菜单->生成->生成解决方案,来生成dll和lib,生成目录为eclipse-paho-mqtt-c-src-1.2.0\Windows Build\Debug

错误和失败的是带SSL的,需要电脑安装OPENSSL库才能编译,需要SSL需求的同学自己安装OPENSSL再编译

paho-mqtt3a : 一般实际开发中就是使用这个,a表示的是异步消息推送(asynchronous)。

paho-mqtt3as : as表示的是 异步+加密(asynchronous+OpenSSL)。

paho-mqtt3c : c 表示的应该是同步(Synchronize),一般性能较差,是发送+等待模式。

paho-mqtt3cs : 同上,增加了一个OpenSSL而已

带S的都需要OpenSSL才能编译,test工程也一样

我的电脑没安装OpenSSL,所以只生成了

paho-mqtt3a.dll 

paho-mqtt3a.lib

paho-mqtt3c.dll

paho-mqtt3c.lib

一般使用足够了,保存关闭工程,以后编译还会用到。

二、调用dll lib编写VC MQTT客户端

1、新建MFC工程

选择MFC用户程序,向导中选择基于对话框,在共享dll中使用MFC

2、设置链接和头文件

将eclipse-paho-mqtt-c-src-1.2.0\src目录中所有文件复制到此工程目录中include目录中(新建)

在工程中创建一个MQTT筛选器,添加MQTTAsync.h和MQTTClient.h

将刚才生成的dll复制到工程目录Debug,将刚才生成的lib复制到工程目录工程源码目录中

在工程属性页添加lib链接库

3、设计界面

4、编写代码,以下只列出MQTT调用核心代码,界面控件的响应和控制就不列出了,只实现基础功能,后期再添加新功能

包含头文件

连接服务器代码

	MQTT_Conn_opts = MQTTClient_connectOptions_initializer;
	MQTT_Pubmsg = MQTTClient_message_initializer;
	
	int rc;
	MQTTClient_create(&MQTT_Client, ServerAddStr, CLIENTID, MQTTCLIENT_PERSISTENCE_NONE, NULL);
	MQTT_Conn_opts.keepAliveInterval = atoi(KeepAliveStr);
	MQTT_Conn_opts.cleansession = 1;
	MQTT_Conn_opts.username = UserName;
	MQTT_Conn_opts.password = PassWord;

	MQTTClient_setCallbacks(MQTT_Client, NULL, MQTT_ConnLost, MQTT_MsgArrvd, MQTT_Delivered);

	if ((rc = MQTTClient_connect(MQTT_Client, &MQTT_Conn_opts)) != MQTTCLIENT_SUCCESS){
		AfxMessageBox("Failed to connect");// , return code %d\n", rc);
		return;
	}
	else{
		printf("MQTT Server Connect OK  \n");
		((CButton*)GetDlgItem(IDC_BUTTON_ConnectServer))->SetWindowText("断开连接");//填入文本框
		GetDlgItem(IDC_BUTTON_SendMsg)->EnableWindow(TRUE);// 发布按钮有效
	}

断开连接代码

// 断开连接
void CMQTT_TestDlg::DisconnectConnect()
{
	MQTTClient_disconnect(MQTT_Client, 10000);
	MQTTClient_destroy(&MQTT_Client);
	((CButton*)GetDlgItem(IDC_BUTTON_ConnectServer))->SetWindowText("连接服务器");//填入文本框
}

发送消息代码

// 发布消息按钮
void CMQTT_TestDlg::OnBnClickedButtonSendmsg()
{
	int rc;
	CString PublishStr, SendMsgStr;
	((CEdit*)GetDlgItem(IDC_EDIT_Publish))->GetWindowText(PublishStr);//获取文本框内容
	((CEdit*)GetDlgItem(IDC_EDIT_SendMsg))->GetWindowText(SendMsgStr);//获取文本框内容
	char buff[2048];
	memset(buff, 0, sizeof(buff));
	strcpy_s(buff, sizeof(buff),SendMsgStr );
	MQTT_Pubmsg.payload = buff;
	MQTT_Pubmsg.payloadlen = strlen(buff);
	MQTT_Pubmsg.qos = QOS;
	MQTT_Pubmsg.retained = 0;
	MQTTClient_publishMessage(MQTT_Client, PublishStr, &MQTT_Pubmsg, &MQTT_Token);
	printf("Waiting for up to %d seconds for publication of %s\n"
		"on topic %s for client with ClientID: %s\n",
		(int)(TIMEOUT / 1000), SendMsgStr, PublishStr, CLIENTID);
	rc = MQTTClient_waitForCompletion(MQTT_Client, MQTT_Token, TIMEOUT);
	printf("Message with delivery token %d delivered\n", MQTT_Token);
	while (deliveredtoken != MQTT_Token);
}

订阅按钮代码

// 订阅按钮
void CMQTT_TestDlg::OnBnClickedButtonSubscribe()
{
	/* 订阅多条
	char *const topics[] = { (char*)"topics1","topics2" };
	//rc = MQTTClient_unsubscribeMany(client, 2, topics);
	*/
	CString SubscribeStr;
	((CEdit*)GetDlgItem(IDC_EDIT_SubscribeMsg))->GetWindowText(SubscribeStr);//获取文本框内容
	if (SubscribeStr.GetLength() <= 0){
		AfxMessageBox("请输入要订阅的消息");
	}else{
		if (MQTTClient_subscribe(MQTT_Client, SubscribeStr, QOS) == MQTTCLIENT_SUCCESS){
			int n = m_SubscribeList.GetItemCount();//获取list里面有多少行
			m_SubscribeList.InsertItem(n, SubscribeStr);//插入行
			((CEdit*)GetDlgItem(IDC_EDIT_SubscribeMsg))->SetWindowText("");//填入文本框
		}else{
			AfxMessageBox("订阅失败");
		}
	}
}

取消订阅代码

// 取消订阅按钮
void CMQTT_TestDlg::OnBnClickedButtonUnsubscribe()
{
	//获取选中的行
	int r = m_SubscribeList.GetSelectionMark();
	if (m_SubscribeList.GetSelectedCount() != 0){
		CString str = m_SubscribeList.GetItemText(r, 0);
		
		printf("取消订阅  第 %d 行  内容:%s\r\n", r,str);
		if (MQTTClient_unsubscribe(MQTT_Client, str) == MQTTCLIENT_SUCCESS){
			m_SubscribeList.DeleteItem(r);
		}else{
			AfxMessageBox("取消订阅失败");
		}
	}else{
		AfxMessageBox("请在列表中选择要取消订阅的消息");
	}
}

消息已送达回调

void MQTT_Delivered(void *context, MQTTClient_deliveryToken dt)
{
	printf("Message with token value %d delivery confirmed\n", dt);
	deliveredtoken = dt;
}

消息到达回调

int MQTT_MsgArrvd(void *context, char *topicName, int topicLen, MQTTClient_message *message)
{
	CString RevMsg,LastRevMsg,TopicName,Msg;
	int i;
	char* payloadptr;
	char buf[4096];
	memset(buf, 0, sizeof(buf));
	printf("Message arrived\n");
	printf("     topic: %s\n", topicName);
	printf("   message: ");
	payloadptr = (char *)message->payload;
	for (i = 0; i<message->payloadlen; i++){
		buf[i] = *payloadptr++;
		//putchar(*payloadptr++);
	}
	putchar('\n');
	//memcpy(buf, payloadptr, message->payloadlen);
	TopicName.Format("%s", topicName);
	Msg.Format("%s", buf);
	RevMsg = "\r\n收到 " + TopicName + " 的消息:" + Msg;
	printf("dddddddddddd  %s\r\n", RevMsg);
	CMQTT_TestDlg *pDlg = (CMQTT_TestDlg*)g_pDlg;
	pDlg->AddMsgToMsgBox(RevMsg);

	MQTTClient_freeMessage(&message);
	MQTTClient_free(topicName);
	return 1;
}

服务器连接断开回调

void MQTT_ConnLost(void *context, char *cause)
{
	printf("\nConnection lost\n");
	printf("     cause: %s\n", cause);
}

MFC实现MQTT服务端(附完整源码)
希望我的博客,能帮上你解决学习中工作中所遇到的问题
11-25 460
MFC实现MQTT服务端(附完整源码)
MFC实现MQTT客户端(附完整源码)
希望我的博客,能帮上你解决学习中工作中所遇到的问题
11-25 449
MFC实现MQTT客户端(附完整源码)
MQTT客户端C语言代码(Paho库及二次封装)
05-30
MQTT客户端实现(使用Eclipse Paho C库,进行了二次封装)。在Linkit7688单片机上运行测试通过,附例程。
C++实现mqtt协议
09-03
C++实现mqtt协议:官网的mqtt c++实现,个觉得写得非常棒!
Linux环境下使用Eclipse Paho C 实现(MQTT Client)异步订阅Message
最新发布
mftang的博客
03-20 1208
本文主要介绍在linux环境(ubuntu)环境下,下载和安装Eclipse Paho C MQTT 软件包,还编写一个范例实现异步订阅Message的功能,并使用基于EMQX的服务验证其功能,使用MQTT.fx发布消息,以验证订阅消息功能的可靠性。
paho-mqtt:用于嵌入式平台的Eclipse Paho MQTT CC ++客户端
05-27
paho-mqtt 1、介绍 是 Eclipse 实现的基于 MQTT 协议的客户端,本软件包是在 Eclipse 源码包的基础上设计的一套 MQTT 客户端程序。 paho-mqtt 软件包功能特点以及 MQTT 协议介绍请参考 。 1.1 目录结构 paho-mqtt 软件包目录结构如下所示: pahomqtt ├───docs │ └───figures // 文档使用图片 │ │ api.md // API 使用说明 │ │ introduction.md // 介绍文档 │ │ principle.md // 实现原理 │ │ README.md // 文档结构说明
eclipse-paho-mqtt-c-win32-1.3.0
04-26
# Eclipse Paho MQTT C/C++ client for Embedded platforms This repository contains the source code for the [Eclipse Paho](http://eclipse.org/paho) MQTT C/C++ client library for Embedded platorms.
VS2019编译完成的paho.mqtt.c库
02-27
paho.mqtt.c.zip这个压缩包,是我配套的教程“VS2019编译MQTT库 C/C++(超详细)”里面的用VS2019编译好的paho.mqtt.c的工程文件,其中包括了源代码,还有编译好的dll库还有lib库
VS2015 64位系统编译MQTT lib库
07-26
paho-mqtt源码生成的lib库,64位系统
mqtt C客户端
viewsky11的专栏
09-26 6704
Paho MQTT C客户端是一个使用标准C编写的流畅的MQTT。 实际上包含了两个C API,同步的和异步的,分别为MQTTClient和MQTTAsync。同步的API可以更简单更使用,执行完操作后,一些调用会被阻拦,编程也更容易;而在异步API没有调用的阻拦操作,所有API的调用都是通过会调来实现的,这使得API更适合有窗口环境的操作系统,许多应用没有主线程控制。linux环境: 在lin
mfc做客户端的简单群聊Demo
01-09
该程序是结合go语言的服务器的群聊客户端代码,运行环境vs2008,依赖boost库1.50(自行官方下载编译
mqtt例子代码
02-22
mqtt ; 消息订阅,消息响应,发送消息; MQTT(Message Queuing Telemetry Transport,消息队列遥测传输)是IBM开发的一个即时通讯协议
MQTT VS 静态库
07-26
示例代码如下 #include "stdafx.h" #include #include "mosquittopp.h" #pragma comment(lib, "mosquittopp.lib") class mqtt_test:public mosquittopp::mosquittopp { public: mqtt_test(const char *id):mosquittopp(id){} void on_connect(int rc) {std::cout<<"on_connect"<<std::endl;} void on_disconnect() {std::cout<<"on_disconnect"<<std::endl;} void on_publish(uint16_t mid) {std::cout<<"on_publish"<<std::endl;} }; int _tmain(int argc, _TCHAR* argv[]) { mosquittopp::mosquittopp::lib_init(); int rc; char buf[1024] = "This is test"; mqtt_test test("testID"); rc = test.connect("127.0.0.1"); if (MOSQ_ERR_SUCCESS == rc) { rc = test.loop(); if (MOSQ_ERR_SUCCESS == rc) { rc = test.publish(NULL, "topic/test", strlen(buf), (uint8_t *)buf); rc = test.loop(); } rc = test.disconnect(); rc = test.loop(); } mosquittopp::mosquittopp::lib_cleanup(); return 0; }
MQTT客户端,和mosquitto_pub.exe功能一样_VS2010 C++源码
12-11
最近在搞MQTT协议,找遍整个网络,发现所有的发布和订阅客户端都是使用的java,php或安卓,这对C++程序员伤不起,于是花了两天时间研究源代码,写了这个demo,和mosquitto_pub.exe的功能一样,网络唯一,对研究MQTT协议的C++程序员很有用。 正在研究C++实现订阅的客户端,即mosquitto_sub.exe的功能,接下来会传到网上供大家参考。
使用paho-mqtt-c做的mqtt通讯
08-12
本人使用paho-mqtt-c做的mqtt连接以及发布订阅功能,包含了遗嘱、自动重连、ssl加密等功能
paho-mqtt.js
10-18
微信小程序集成mqtt所需js
基于paho.mqtt.c用C++封装实现mqtt
01-21
基于paho.mqtt.c用C++封装实现mqtt,可以在C++项目环境下作为组件使用,注意前提是安装了paho.mqtt.c库哦,未安装的话,麻烦移步看本人相关博客。
paho.mqtt交叉编译arm
10-14
mqtt跨平台arm交叉编译,MQinstall是mqtt安装路径,arminstall是openssl的库包,makefile已经移植好的,如果交叉编译环境搭建好,直接make就可以了
sudo后,Successfully built paho-mqtt Installing collected packages: paho-mqtt Successfully installed paho-mqtt-1.6.1
06-03
这个提示显示paho-mqtt已经成功安装,您现在可以在Python代码中导入paho-mqtt模块并使用它了。例如: ``` import paho.mqtt.client as mqtt # 在这里写入您的MQTT客户端代码 ``` 注意,您需要使用pip install命令在您的Python虚拟环境中安装paho-mqtt库,然后在Python代码中导入它以使用其功能。

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

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Altium Designer 18 AD18铺铜铺不上 只显示外框问题 27598
  • ESP32 开发笔记(二) 开发环境搭建 windows VSCode ESP32开发环境搭建(cmd/powershell方式编译) 19667
  • ESP32 开发笔记(三)源码示例 0、Hello Bug ESP_LOGX与printf 19603
  • VC MFC 获取屏幕大小 程序窗口大小位置 控件大小位置 17409
  • ESP32 开发笔记(三)源码示例 1、LED 16627

分类专栏

  • ESP32 42篇
  • ESP32 HelloBug开发板教程 69篇
  • LVGL 39篇
  • Python 3篇
  • HTTP 1篇
  • OpenCV 1篇
  • 虚拟机 4篇
  • Android 36篇
  • VC 13篇
  • VC++ 25篇
  • C语言 12篇
  • C++ MFC 控件 11篇
  • Altium Desigenr 10篇
  • ARM Linux 6篇
  • MQTT 4篇
  • HTML 2篇
  • javascript 2篇
  • lua 1篇
  • 4G 1篇
  • QT 2篇
  • IOS 2篇
  • 计算机
  • 网络 7篇
  • Flash 8篇
  • ASP.NET 4篇
  • AS 1篇
  • Keil uVision 1篇
  • 单片机 2篇
  • Eclipse 4篇
  • Android 环境 5篇
  • ARM9 开发 3篇
  • STM32 3篇
  • Ubuntu 5篇
  • C# 1篇
  • SQLite 1篇
  • Linux 3篇
  • C 3篇
  • JNI 2篇
  • so库 2篇
  • JAVA 1篇

最新评论

  • ESP32开发学习 LVGL Littlevgl 使用文件系统加载PNG图片解码显示

    刚入行的小菜鸡: 你好,这个可以打印出来每个的像素点吗

  • ESP32 开发笔记(三)源码示例 8_DHT11_RMT 使用RMT实现读取DHT11温湿度传感器

    2301_77425931: 请问头文件的dht11.h是要自己创建组件吗,还是要上网下载库?

  • ESP32 开发笔记(三)源码示例 18_WIFI_AP_UDP 在软AP模式下实现UDP通讯

    落叶_你好: 已关注,求源码:1285353592@qq.com

  • ESP32 开发笔记(三)源码示例 10_IIC_ADXL345 使用IIC总线实现读取ADXL345角度加速度传感器

    ingtingchen: GetAnalogDevicesID() 请交代这个函数如何实现...

  • ESP32 开发笔记(三)源码示例 16_WIFI_AP_TCP_Server 在AP模式下实现TCP服务端

    m0_65842346: 大佬,我也想要一份代码............... 736780419@qq.com 感谢

大家在看

  • XSS 蓝莲花-数据接收平台_pikachu靶场
  • 锐捷设备实操(快速生成树协议RSTP)

最新文章

  • ESP32开发环境搭建Windows VSCode集成Espressif IDF插件开发环境搭建 IDF_V5.2.1
  • 本地MQTT服务器搭建(EMQX)
  • ESP32开发环境搭建Windows VSCode集成Espressif IDF插件ESP32_IDF_V5.0开发编译环境搭建
2024年1篇
2023年2篇
2022年2篇
2021年27篇
2020年93篇
2019年1篇
2018年8篇
2017年3篇
2016年93篇

目录

目录

评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值

聚圣源金色钱塘网商店起名字这个牌子怎么起名五行多缺火起名字女孩八字起名字大全免费测试japanesexxx广西卫生厅情侣睡前故事红事新办是什么意思专门职位是什么意思宪字起名家小餐馆起名相氏起名大全取名子还是起名字你好李焕英剧本起名男楚辞诗经女听音乐软件属鼠名字男孩起名缘之空第12话将婚姻进行到底剧情介绍华能国际股吧王鹤棣新恋情短信软件袁隆平今年多少岁了2021年猪小儿起名宜用的字显卡80度取名网商标起名利用父母姓氏名字起名男孩英文起名易学起名字啊淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻让美丽中国“从细节出发”清明节放假3天调休1天男孩疑遭霸凌 家长讨说法被踢出群国产伟哥去年销售近13亿网友建议重庆地铁不准乘客携带菜筐雅江山火三名扑火人员牺牲系谣言代拍被何赛飞拿着魔杖追着打月嫂回应掌掴婴儿是在赶虫子山西高速一大巴发生事故 已致13死高中生被打伤下体休学 邯郸通报李梦为奥运任务婉拒WNBA邀请19岁小伙救下5人后溺亡 多方发声王树国3次鞠躬告别西交大师生单亲妈妈陷入热恋 14岁儿子报警315晚会后胖东来又人满为患了倪萍分享减重40斤方法王楚钦登顶三项第一今日春分两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?周杰伦一审败诉网易房客欠租失踪 房东直发愁男子持台球杆殴打2名女店员被抓男子被猫抓伤后确诊“猫抓病”“重生之我在北大当嫡校长”槽头肉企业被曝光前生意红火男孩8年未见母亲被告知被遗忘恒大被罚41.75亿到底怎么缴网友洛杉矶偶遇贾玲杨倩无缘巴黎奥运张立群任西安交通大学校长黑马情侣提车了西双版纳热带植物园回应蜉蝣大爆发妈妈回应孩子在校撞护栏坠楼考生莫言也上北大硕士复试名单了韩国首次吊销离岗医生执照奥巴马现身唐宁街 黑色着装引猜测沈阳一轿车冲入人行道致3死2伤阿根廷将发行1万与2万面值的纸币外国人感慨凌晨的中国很安全男子被流浪猫绊倒 投喂者赔24万手机成瘾是影响睡眠质量重要因素春分“立蛋”成功率更高?胖东来员工每周单休无小长假“开封王婆”爆火:促成四五十对专家建议不必谈骨泥色变浙江一高校内汽车冲撞行人 多人受伤许家印被限制高消费

聚圣源 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化