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);
}

VC MFC C++ MQTT VC编译MQTT VC调用MQTT dll eclipse-paho-mqtt相关推荐

  1. Eclipse Paho MQTT Python Client 使用手册

    Eclipse Paho MQTT Python Client 使用手册 原文地址:https://www.cooooder.com/archives/20210303 目录 介绍 环境 准备 快速开 ...

  2. paho架构_GitHub - yanzhangfeng/paho-mqtt: Eclipse Paho MQTT C/C++ client for Embedded platforms

    paho-mqtt 1.介绍 Paho MQTT 是 Eclipse 实现的基于 MQTT 协议的客户端,本软件包是在 Eclipse paho-mqtt 源码包的基础上设计的一套 MQTT 客户端程 ...

  3. cmake:解决MSVC下/MT 编译paho.mqtt.c的问题

    paho.mqtt.c是eclipse开发的C语言跨平台mqtt client 开源库,之前写过一篇博客<cmake:VS2015和GCC编译paho.mqtt C/C++ client> ...

  4. paho.mqtt.c使用openssl加密通讯

    证书的生成和配置请参考https://blog.csdn.net/sy84436446/article/details/128576433 下载和编译 # 下载paho.mqtt.c代码 git cl ...

  5. STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云

    STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云 目录 STM32+ESP8266(ESP-12F)物联网温度计-移植paho MQTT协议连接阿里云 一 ...

  6. 【VC++ MFC】vc 画笔和画刷|OnDraw()和OnPaint()

    目录 [VC++ MFC]vc 画笔和画刷 [VC++ MFC]OnDraw()和OnPaint() [VC++ MFC]vc 画笔和画刷 6,利用画笔改变线条颜色和类型: CPen pen(PS_D ...

  7. C语言用句柄显示bmp图片,VC编程之VC MFC界面上显示BMP图片

    本文主要向大家介绍了VC编程之VC MFC界面上显示BMP图片,通过具体的内容向大家展示,希望对大家学习VC编程有所帮助. 1.通过点击界面浏览按钮选择BMP图像文件. 点击浏览按钮打开文件对话框选择 ...

  8. cmake:VS2015和GCC编译paho.mqtt C/C++ client

    paho.mqtt.c是eclipse开发的C语言跨平台mqtt client 开源库,paho.mqtt.cpp是对应的C++ Client,paho.mqtt支持CMAKE编译,本文以脚本形式提供 ...

  9. paho.mqtt.cpp库编译

    本人C++新手,cmake刚接触,最近想用到MQTT,下载的库老是编译不过,在网上找了很多教程说的都不太清楚,所以写下这篇记录一下编译过程,主要参考github说明文档. 环境:win10 64位 , ...

最新文章

  1. 006---Linux用户、群组和权限
  2. C# 控件缩写大全+命名规范+示例
  3. Spring Boot(十七):使用Spring Boot上传文件
  4. 一个分页效果ruby版可作为面试题吧
  5. java 由接口构造对象_Java学习笔记04——类和对象|抽象和接口|构造方法与继承...
  6. 数据分析学习笔记—python简单操作EXCEL
  7. 如何在Oracle中导入dmp文件
  8. GML C++ Camera Calibration Toolbox 相机标定畸变矫正
  9. ADO.NET 数据库操作类
  10. 电力载波通信模块JST-HPLC-N-C在物联网通信领域的应用
  11. 网易云登陆界面怎么用PHP做,网易云音乐登录流程图
  12. RethinkDB创始人教你如何找到创业创意(完整篇)
  13. Android音视频编码基础一
  14. Android动态更改通知图标,修改通知标志  |  Android 开发者  |  Android Developers
  15. c++ 发邮件(含附件)
  16. Doris系列之导入Kafka数据操作
  17. 童年记忆中的各种水果
  18. 光学定位与追踪技术_光学追踪技术
  19. sql server高级查询及更新操作二
  20. 【数据结构初阶】双向带头循环链表原来是纸老虎,结构复杂,操作简单

热门文章

  1. Android调用系统输入法
  2. 推荐1位AI产品经理求职信息(企业方可要简历),新增3个JD(共计59个、AI PM可内推)...
  3. [Keil 烧录器下载报错] “Flash Timeout. Reset the Target and try it again”
  4. 记一次 selenium 处理浏览器证书弹窗的经历
  5. Excel制作动态图表
  6. 点线面的意义_论文:点线面在设计中的运用
  7. model trainning 模型训练
  8. hazelcast 搭建_Spring Boot集成Hazelcast实现集群与分布式内存缓存
  9. 信息学奥赛知识点(一)—计算机基础知识【转载】
  10. Matlab实现蒙特卡罗方法(随机模拟法)