说明:

该文章记录了基于百度智能云MQTT服务器的测试使用过程,方便以后查阅。

MQTT协议中文版下载 https://legacy.gitbook.com/book/mcxiaoke/mqtt-cn/details

1、创建百度智能云

登陆入口地址:https://login.bce.baidu.com/?account=

找到如下入口并进入。

创建新项目:

设备型:百度云已提供JSON解析过滤功能,提供主题变动及发布等事件的处理。适用于一般控制类设备,不适合数据流设备。使用简单快速。

数据型:该类型设备只提供MQTT的服务器功能,不提供payload数据解析功能。使用灵活。

创建项目成功后会出现三个连接地址:

  1. tcp://au****.mqtt.iot.gz.baidubce.com:1883   用于TCP通讯使用
  2. ssl://au*****.mqtt.iot.gz.baidubce.com:1884  客户端MQTT.fx 使用该端口  1884支持 SSL/TLS安全认证
  3. wss://au*****.mqtt.iot.gz.baidubce.com:443

在用户列表下可进行测试,输入身份密钥执行连接,

测试主题发布与订阅时,必须保证该主题在策略列表中已添加过。只有策略列表里添加的主题才允许被使用

如上发布订阅测试通过。即可用于实际应用场合

2、通过 MQTT.fx 客户端测试连接

参考百度智能云提供的教程 https://cloud.baidu.com/doc/IOT/Quickstart-new.html#.E6.93.8D.E4.BD.9C.E6.AD.A5.E9.AA.A4

3、Socket 通讯测试

原理:MQTT C语言库提供MQTT协议序列化和反序列功能。

接收过程是将Socket接收到的数据流传递给MQTT库解算。发送工程是将要登陆信息、发布的主题、订阅主题操作序列化成数据流传递给Socket发送数据流中。完成一个数据传输的功能。MQTT是一套协议,Socket是一个数据传输工具。

3.1、C语言Socket

测试使用在VS2013平台,MQTT服务器连接在Socket连接阶段完成。


#include <stdio.h>
#include <winsock2.h>
#include <Windows.h>
#pragma comment (lib, "ws2_32.lib")         //socket库文件typedef struct sockaddr_in sockaddr_in;SOCKET s_socket;int SocketClass::Connect(char*  hostname, int port)
{sockaddr_in sockaddr;char buffer[MAXBYTE] = { 0 };WSADATA wsaData;//加载库WSAStartup(MAKEWORD(2, 2), &wsaData);//创建套接字s_socket = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);//域名解析出IPstruct hostent *host = gethostbyname(hostname);char *ip;if (host == NULL) return -1;else ip = inet_ntoa(*(struct in_addr*)host->h_addr_list[0]);//连接服务器sockaddr.sin_family = PF_INET;sockaddr.sin_addr.S_un.S_addr = inet_addr(ip);sockaddr.sin_port = htons(port);return connect(s_socket, (SOCKADDR*)&sockaddr, sizeof(SOCKADDR));
}int SocketClass::Close()
{closesocket(s_socket);WSACleanup();return 0;
}int SocketClass::Write(char* buff, int len)
{return send(s_socket, buff, len, 0);
}int SocketClass::Read(char* buff, int len)
{//等待接收到数据才会退出return recv(s_socket, buff, len, 0);
}

3.2、MQTT登陆

int mqtt_connect(void)
{u8 connectBuf[CONNECTBUFMAX];int len;MQTTPacket_connectData data = MQTTPacket_connectData_initializer;data.clientID.cstring = (char*)coco_mqttConnectName;   // 客户端标识符(自定义字符串)data.keepAliveInterval = 50;                      // keep Alive 单位sdata.cleansession = 0;                                // 清理会话标志置位data.username.cstring = "aut6m7h/device";                 // 用户名data.password.cstring = "yhnG3PJm6666666";                 // 用户密码len = MQTTSerialize_connect(connectBuf, sizeof(connectBuf), &data);//发送登陆信息_socket.Write((char*)connectBuf, len);//等待登陆结果应答len = _socket.Read(readBuff, 512);if (len >= 4 && (memcmp("\x20\x02", readBuff, 2) == 0))    //参考MQTT文档CONNACK报文说明{printf_s("MQTT登陆成功\r\n");return 0;}else{printf_s("MQTT登陆失败\r\n");return -1;}
}

3.3、MQTT主题订阅

bool MQTT_Subscribe(char *subscribe)
{int len;int req_qos = 0;u8 buf[512];MQTTString topicString = MQTTString_initializer;topicString.cstring = subscribe;len = MQTTSerialize_subscribe(buf, sizeof(buf), 0, MQTT_packid++, 1, &topicString, &req_qos);_socket.Write((char*)buf, len);len = _socket.Read((char*)buf, 512);if (len >= 5 && (memcmp("\x90\x03", buf, 2) == 0)){if ((buf[4] & 0x80) != 0x80){return true;}}return false;
}

3.4、MQTT主题发布

bool MQTT_Publish(char *topic, char *str)
{u8 fifo[512];int outLen = 0;MQTTString topicString = MQTTString_initializer;topicString.cstring = topic;int len = MQTTSerialize_publish(fifo, 512, 0, 0, 0, MQTT_packid++, topicString, (u8*)str, strlen(str));_socket.Write((char*)fifo, len);return false;
}

3.5、MQTT接收订阅消息

 int len = _socket.Read(rxfifo, 512);if (len >= 2){if ((rxfifo[0] & 0xF0) == 0x30)//收到发布的消息{u8 dup;int qos;u8 retanined;u16 msgid;MQTTString receiveTopic;u8 *payload;int payloadLen;int ret = MQTTDeserialize_publish(&dup, &qos, &retanined, &msgid, &receiveTopic, &payload, &payloadLen, (u8*)rxfifo, len);if (ret){char topic[100];char data[512];memcpy(topic, receiveTopic.lenstring.data, receiveTopic.lenstring.len);topic[receiveTopic.lenstring.len] = 0;memcpy(data, payload, payloadLen);data[payloadLen] = 0;printf_s("发序列化成功 topic[%s] payload[%s]\r\n", topic, data);}}}

注意:反序列化函数输出值  主题名(receiveTopic.lenstring.data)和主题的数据部分(payload)地址指向原始数据空间(rxfifo数组)中的某一个位置,结算后拷贝出来,不要对上述两个值执行写操作,以免数据破坏。

MQTT初体验-百度智能云相关推荐

  1. python图像识别步骤_利用百度智能云结合Python体验图像识别(转载来自qylruirui)

    利用百度智能云结合Python体验图像识别 只要注册了百度账号就可以轻松体验百度智能云中图像识别功能的魅力! 1. 所需要的工具 一个百度账号(大家都有哈) 一个可以运行python代码的编译器(Py ...

  2. python 菜品识别_利用百度智能云结合Python体验图像识别(来自qylruirui)

    利用百度智能云结合Python体验图像识别 只要注册了百度账号就可以轻松体验百度智能云中图像识别功能的魅力! 1. 所需要的工具 一个百度账号(大家都有哈) 一个可以运行python代码的编译器(Py ...

  3. 百度智能云体验馆领取CDN及24小时急速收录

    进入百度智能云体验馆,领取内容分发加速网络CDN流量包. 领取后进入CDN控制台,地址:https://console.bce.baidu.com/cdn/#/cdn/list 进入控制台后,点击域名 ...

  4. 百度智能云联手爱奇艺,从云到边缘计算全面提升用户体验

    近年来,随着人工智能和云计算技术的飞速发展,边缘计算作为一种新型计算架构开始受到越来越多企业的关注和应用.百度智能云和爱奇艺作为国内领先的云计算服务提供商和内容提供商,也开始将边缘计算应用于实际业务中 ...

  5. 百度智能云 x 乐元素丨定制全球加速方案 让玩家畅享极致操作体验

    有没有一款游戏,玩家上到九十九,下到刚会走? 答案就是:开心消消乐. 诞生于北京的乐元素,在2014年初推出了开心消消乐移动版,游戏一经上线,就以其简单实时的快感,获得了各年龄段用户的喜爱.曾一度占据 ...

  6. 百度智能云 x 国寿财险 | 打造NPS+AI新一代客户体验管理模式

    如果你是国寿财险的客户,你会在投保完成.理赔.增值服务等业务场景即时收到 NPS(Net Promoter Score,净推荐值)系统推送的调研问卷.看似简单的一张调研问卷,对于国寿财险来说并不简单. ...

  7. 百度智能云×北大图书馆丨管理精细服务精准,数字化图书馆新体验

    作为中国最早的现代新型图书馆之一,北京大学图书馆(以下简称"北大图书馆")已经被国务院批准为首批国家重点古籍保护单位,并且逐渐发展成为资源丰富.现代化.综合性.开放式的研究型图书馆 ...

  8. 为奥运喝彩!百度智能云联合央视体育客户端打造奥运播报新体验!

    东京奥运闭幕,本届中国代表团获得了38金32银18铜的好成绩,金牌数追平了参加境外奥运会的最佳战绩!此次奥运会期间,基于百度大脑领先的语音技术,百度智能云助力央视体育客户端,携手为用户带来真人般的语音 ...

  9. 听障人士的“有声桥梁”:百度智能云曦灵-AI手语平台发布

    在刚刚落幕的冰雪赛事中,百度智能云曦灵为央视新闻打造的AI手语主播正式上岗,她以流畅.专业的手语服务实时传递冰雪运动的激情.然而在日常生活中,听障人士想要方便地获取信息仍面临着众多困难,无障碍窗口稀缺 ...

最新文章

  1. 怎么将导出的sql文件再次导入到数据库?
  2. php序列化中文,详解之php反序列化
  3. 正负样本不平衡处理方法总结
  4. 经典面试题:链表的相交与环问题
  5. POJ 2226 二分图最小覆盖
  6. 自家院子里能不能种桃树呢?
  7. 2021-08-25Prompt
  8. C语言2级题pdf百度云,C语言二级考试试题.pdf
  9. 科学家发现孤独感与大脑中的默认网络有关
  10. ABAP 数据的基本输出Write简单用法
  11. 「国有企业数字化转型」的60个典型案例
  12. 新酒饮赛道混战升级,果立方和RIO、贝瑞甜心有什么不同?
  13. 什么是DBMS,什么是数据库?
  14. PHP技术开发微信公众平台
  15. FFMPEG录制视频
  16. cocos2dx-js 初探 整体流程helloworld.html分析
  17. 美图旗下美妆平台将停止运营 COO:All in “美和社交”
  18. JQuery中的id选择器含有特殊字符时,不能选中dom元素的解决方法
  19. JixiPix Hand Tint Pro for Mac(图片处理软件)
  20. 计算机科学与技术0775,0775 计算机科学与技术学硕专业介绍

热门文章

  1. 分享爬取智联的一段源码
  2. 【信号处理】数字均衡器设计含Matlab源码
  3. 淘宝专业版改基础版方法
  4. 2007年网络经典语录
  5. 关于AD21中PCB布线中补泪滴 焊盘处如何设计
  6. Vue实战之 9.商品管理 -- 商品列表
  7. 手机配合aidlux部署DDbot 教程
  8. 1.3【潜心创作】冒险游戏(我的世界MineCraft)不喜勿喷
  9. 51CTO移动客户端可以在线下载安装啦
  10. 有奖补!2022年武汉市集成电路产品发展若干政策专项资金申报要求以及申报奖励补贴标准