linux下MQTT服务器(EMQX)搭建及paho.mqtt.c客户端开发

这篇具有很好参考价值的文章主要介绍了linux下MQTT服务器(EMQX)搭建及paho.mqtt.c客户端开发。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

前言:

MQTT 是一种基于客户端服务端架构的发布 / 订阅模式的消息传输协议。它的设计思想是轻巧、开放、 简单、规范,易于实现。这些特点使得它对很多场景来说都是很好的选择,特别是对于受限的环境如机器与 机器的通信( M2M )以及物联网环境( IoT )。        ----MQTT 协议中文版

一.linux下EMQX服务器搭建

下载安装包 免费下载、试用 EMQ 产品
找对自己开发环境版本
emqx linux,linux,c语言
1.下载deb包
wget https://www.emqx.com/zh/downloads/broker/4.4.19/emqx-4.4.19-otp24.3.4.2-1-ubuntu16.04-amd64.deb
2.安装
sudo apt install ./emqx-4.4.19-otp24.3.4.2-1-ubuntu16.04-amd64.deb
3.运行
sudo systemctl start emqx
此时在浏览器登录服务器IP   http://(server_ip):18083/#/

即可验证自己服务器安装的是否成功,用户名是 admin,初始密码 public

emqx linux,linux,c语言

二.客户端工具MQTTX的安装

下载地址 免费下载、试用 EMQ 产品
emqx linux,linux,c语言

 我用的是windows下的,接着安装运行直接下一步走下去就行了。

emqx linux,linux,c语言
name:客户端的名字
client ID:客户端ID
host:第一步里面服务器的IP地址
创建好了之后连接服务器,然后再创建一个客户端,相互收发验证。
emqx linux,linux,c语言
emqx linux,linux,c语言

三.linux下paho.mqtt.c的开发

1. paho.mqtt.c下载
git clone https://github.com/eclipse/paho.mqtt.c.git
cd paho.mqtt.c
mkdir build
cd build
cmake ..
make 
make install

emqx linux,linux,c语言

安装完成会在/usr/local/include和/usr/local/lib下看见mqtt的头文件和动态库。

 2.mqtt代码开发
#include <MQTTAsync.h>  //换成你自己的安装路径,不然回报错
#include <stdio.h>
#include <unistd.h>
#include <string.h>
#define  SERVERIP "xxx"  //换成你自己的服务器
#define Clientid "sza123"    //这个随便写
int isConnected=0;
//消息回调函数
int onMessrecv(void* context,char*topicName,int topicLen,MQTTAsync_message*message){
            printf("recv name:\ntopic:%s,payload:%s\n",topicName,(char*)message->payload);
            MQTTAsync_free(topicName);
            MQTTAsync_free(message);
            return 1;         
}
void onSubscribe(void* context,MQTTAsync_successData* response){
    printf("sub success!");
}
//连接mqtt服务器
void onConnect(void *context,MQTTAsync_successData* response)
{
    MQTTAsync client =(MQTTAsync)context;
    int ret;
    MQTTAsync_responseOptions response_opt=MQTTAsync_responseOptions_initializer;
    printf("Succeed in connecting to mqtt-server!\n");
    response_opt.onSuccess=onSubscribe;
    ret=MQTTAsync_subscribe(client,"/pub",1,&response_opt);//订阅/pub主题消息
    if(ret!=MQTTASYNC_SUCCESS){
        printf("fail to sub!\n");
    }
    isConnected=1;
}
void disConnect(void *context,MQTTAsync_failureData* response)
{
    printf("Failed to connect  mqtt-server!\n");
}
void onSend(void* context,MQTTAsync_successData* response){
    printf("send message to mqtt server success!\n");
}
int main()
{
    MQTTAsync client;
    int ret;
    MQTTAsync_connectOptions conn_opt = MQTTAsync_connectOptions_initializer;//初始化连接选项
    ret=MQTTAsync_create(&client,SERVERIP,Clientid,MQTTCLIENT_PERSISTENCE_NONE,NULL);
    if(ret!=MQTTASYNC_SUCCESS)
    {
        printf("Cannot create mqtt client!\n");
        return -1;
    }
    //初始化接收消息回调
    ret=MQTTAsync_setCallbacks(client,NULL,NULL,onMessrecv,NULL);
    if(ret!=MQTTASYNC_SUCCESS){
        printf("cannnot set call back function!\n");
        return  -1;
    }
    conn_opt.onSuccess=onConnect;
    conn_opt.onFailure=disConnect;
    conn_opt.automaticReconnect=1;
    conn_opt.context=client;
    conn_opt.cleansession=0;
    //conn_opt.username="xxx";//设置用户名密码换成自己的
    //conn_opt.password="xxx";
    ret=MQTTAsync_connect(client,&conn_opt);
    //因为是异步的,当MQTTAsync_connect返回的时候只是代表底层代码对参数进行了检查
    //当正确返回时,表示底层代码接收了该connect连接命令
    if(ret!=MQTTASYNC_SUCCESS)
    {
        printf("Cannot start a mqttt server connect!\n");
        return -1;
    }
    while (1){
        //1表示成功连接到我们的服务器
        if(isConnected==1){
            MQTTAsync_message message=MQTTAsync_message_initializer;
            MQTTAsync_responseOptions res_option=MQTTAsync_responseOptions_initializer;
            char buffer[200];
            static int temp=16;
            static int humid=58;
            sprintf(buffer," temp:%d,humid:%d ",temp++,humid++);
            message.payload=buffer;
            message.payloadlen=strlen(buffer);
            message.qos=1;
            res_option.onSuccess=onSend;
            printf("read the message is :");
            //发布消息
            ret=MQTTAsync_sendMessage(client,"/sensor/dht11/0",&message,&res_option);//发送消息
            if(ret!=MQTTASYNC_SUCCESS){
                printf("参数错误!");
            }
                   sleep(10);  
                   if(temp>30|humid>90){
                       temp=16;
                       humid=58;
                   }
        }
    }
    return 0;
}


 然后编译

gcc mqtt.c -o mqtt -I /usr/local/include/ -lpaho-mqtt3a

运行mqtt

emqx linux,linux,c语言

 emqx linux,linux,c语言

 此时windows上的客户端工具就会接收相应的内容,也可以向linux客户端发送消息。文章来源地址https://www.toymoban.com/news/detail-740074.html

到了这里,关于linux下MQTT服务器(EMQX)搭建及paho.mqtt.c客户端开发的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • ubuntu18.04.6 搭建mqtt服务器emqx 之docker方式

    前提docker环境已经安装好 如未安装,请参考博文https://blog.csdn.net/a554521655/article/details/134251763

    2024年01月20日
    浏览(50)
  • 【MQTT服务器】宝塔服务器安装EMQX

    本文介绍一种简单的服务器安装EMQX方法。         进入软件商店搜索docker,安装         拉取完成在容器列表可查看emqx状态 emqx的web管理地址:http://服务器公网IP:18083 账号:admin 密码:public 其他端口:如果发现某个端口访问不了,尝试去宝塔面板的安全位置去放行一

    2024年02月03日
    浏览(132)
  • RuoYi-Vue前后端分离搭建MQTT服务器实现消息订阅、发布、数据存储 (EMQX Windows10)最全,懒人操作

    1、在RuoYi-Vue项目的superVisualizationSys-common模块下的pom.xml加入jar包依赖 3、在superVisualizationSys-commonsrcmainjavacomsuperVisualizationcommonutils目录下新建mqtt文件夹,添加以下三个文件 注:项目报红的地方可以按Alt+Enter键导包 下载路径: https://www.emqx.io/zh/download   1. 在windows上安装

    2024年02月15日
    浏览(52)
  • 连接(EMQX)mqtt服务器时报错

    线下项目连接正常,部署到阿里云服务器的项目也正常连接,仅在安装emqx的服务器上部署的项目连接不上。 具体报错信息,如下: 2022-09-01 15:25:27.791 ERROR 1 — [ main] c.z.iotplatfrom.util.mqtt.MQTTListener : Unable to connect to server org.eclipse.paho.client.mqttv3.MqttException: Unable to connect to server

    2024年02月05日
    浏览(64)
  • 华为云云耀云服务器L实例评测|基于华为云云耀云服务器L实例搭建EMQX大规模分布式 MQTT 消息服务器场景体验

    EMQX 是一款国内开发的大规模分布式MQTT消息服务器,它旨在为物联网应用提供高效可靠的连接,实时处理和分发消息以及事件流数据。作为一个关键的物联网基础设施组件,EMQX为企业和开发者提供了一个强大的工具,用于构建各种规模和复杂度的物联网与云应用。 EMQX的主要

    2024年02月08日
    浏览(57)
  • 免费版的mqtt服务器(EMQX 开源版)

    免费版的mqtt服务器(EMQX 开源版) 全球下载量超千万的开源物联网 MQTT 服务器,高效可靠连接海量物联网设备,高性能实时处理消息与事件流数据,可运行在公有云、私有云和混合云上。 免费下载、试用 EMQ 产品 (emqx.com) https://www.emqx.com/zh/try?product=broker ecs云服务优惠券 htt

    2024年02月11日
    浏览(61)
  • 阿里云Ubuntu安装部署EMQX物联网MQTT服务器

    阿里云服务器免费领取https://developer.aliyun.com/adc/student/ Xshell 云服务器可以通过远程连接的方式进行控制 1.下载安装包 XShell官网  2.简单配置 名称:随便即可 主机:服务器IP地址 端口号:默认22端口 连接后输入用户名(通常为root),密码后成功进入服务器终端    此外,还有

    2023年04月13日
    浏览(42)
  • Linux搭建MQTT服务器(Mosquitto)

    编译时,若提示fatal error: cjson/cJSON.h: No such file or directory,需要安装cJSON,然后重新安装mosquitto。 若不添加软连接,发布、订阅消息时会提示\\\"error while loading shared libraries: libmosquitto.so.1: cannot open shared object file: No such file or directory\\\"。 打开两个服务器连接,分别执行mosquitto_sub、

    2024年02月09日
    浏览(52)
  • Ubuntu部署EMQX开源版MQTT服务器-Orange Pi部署-服务器部署

            作为全球最具扩展性的 MQTT 消息服务器,EMQX 提供了高效可靠海量物联网设备连接,能够高性能实时移动与处理消息和事件流数据,本文将介绍如何在Ubuntu 22.04上部署MQTT服务器。我们本次选择开源版,使用离线安装方式部署。        安装包可以有两种格式,一种

    2024年01月18日
    浏览(44)
  • 使用合宙Air724UG物联网模块发送MQTT消息至EMQX服务器 MQTT如何发送消息 AIR724发送MQTT至腾讯云 腾讯云接收MQTT消息

    在上一篇关于物联网的文章中介绍了如何建立一个MQTT的EMQX服务器,有需要的同学可以点击查看。在这里服务器的作用相当于建立一个MQTT消息的中转站,消息先发送到服务器中,再在服务器进行转发消息。 那么有了一个转发的平台,如何在嵌入式终端中发送MQTT消息呢,在这

    2024年02月09日
    浏览(58)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包