使用MQTT.fx和自定义Client(Ubuntu上实现)测试MQTT服务器(EMQX )

目录

概述

1 配置EMQX做MQTT服务器

1.1 登录EMQX

1.2 配置EMQX

1.2.1 配置客户端认证

1.2.2 创建用户

2 测试MQTT服务器

2.1 配置MQTT.fx工具

2.2 连接MQTT服务器

3 使用MQTT.fx发布和订阅信息

3.1 在MQTT.fx上发布信息

3. 2 在MQTT.fx上订阅信息

4 Ubuntu上实现MQTT Client

4.1 Ubuntu上编写MQTT Client

4.2 编译和测试

5 MQTT.fx订阅MQTT_USR2 Topic

5.1 MQTT.fx订阅Topic

5.2 EMQX上查看数据流


概述

本文详细介绍如何EMQX配置一个MQTT服务器,并使用MQTT.fx工具,分别实现了MQTT message的订阅和发送功能。还在Ubuntu上实现了一个Client,它可以发布信息,MQTT.fx工具用来订阅该信息,用以测试MQTT服务器的数据发布和订阅功能。

1 配置EMQX做MQTT服务器

1.1 登录EMQX

在Ubuntu上安装好了EMQX之后,然后在第三方电脑上登录该服务器,并做相应的配置。第一步要做的事情是登录该服务器,怎么登录系统?在浏览器上输入网址,会看到如下页面:

这时候需要输入用户名和密码:

类型 内容 注释
username admin 用户名
password public 密码

输入用户名和密码后,点击登录按钮,会进入如下页面,说明已经成功登录到服务器。后面需要做一些相应的配置,使其成为MQTT服务器。

1.2 配置EMQX

1.2.1 配置客户端认证

这里主要配置访问MQTT服务器的方式,数据库信息等类型,配置步骤如下:

step -1:选择Password-Based方式,其目的: 使用客户端用户名、Client ID 与密码进行认证

step-2: 选择内置数据库,这样不用再安装第三方数据了

step - 3: 配置参数,选择默认配置即可

点击创建按钮后,跳到如下页面,数据库创建成功:

1.2.2 创建用户

在如下选项卡中选择配置用户

添加用户信息

笔者使用如上方法创建连个用户:

2 测试MQTT服务器

2.1 配置MQTT.fx工具

笔者已经在EMQX中配置了两个user,现在使用MQTT.fx来连接该服务器,以验证其是否可以正常的功能。在连接EMQX之前,需要在MQTT.fx中创建一个终端。

step - 1: 配置EMQX的IP地址

step-2: 输入用户认证

以上两步完成后,可以尝试连接MQTT服务器

2.2 连接MQTT服务器

点击connect后,看见如下图标颜色,说明MQTT.fx连接服务器成功

在服务器端可以看见如下信息。这时可以在MQTT.fx上发布和订阅信息:

3 使用MQTT.fx发布和订阅信息

3.1 在MQTT.fx上发布信息

定义一个topic : switch

{
    "DI1": true,
    "DI2": false,
    "DI3": false,
    "DI4": true,
    "DI5": true,
    "DI6": false
}

3. 2 在MQTT.fx上订阅信息

选择subscribe选项卡,输入订阅的topic,然后在publish选项卡中发布信息,subscribe中可以看见如下信息,说明订阅数据成功:

4 Ubuntu上实现MQTT Client

下面实现一个功能: 在Ubuntu上实现MQTT Client, 然后发布信息至服务器。MQTT.fx订阅该信息,并查看Ubuntu上MQTT Client发布的信息与MQTT.fx接收到的信息是否一致

4.1 Ubuntu上编写MQTT Client

本Client选择连接的用户信息如下:

代码实现如下:

#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
#include <sys/types.h>
#include <sys/stat.h>
#include <fcntl.h>
​
#include "MQTTClient.h"
​
#define ADDRESS     "tcp://192.168.1.11"
#define CLIENTID    "MQTT_USR2"
​
#define TOPIC       "mytest"
#define PAYLOAD     "123456"
​
#define USERNAME    "mqtt_user2"
#define PASSWORD    "123456"
​
#define QOS         0
#define TIMEOUT     10000L
​
int main(int argc, char* argv[])
{
    MQTTClient client;
    MQTTClient_connectOptions conn_opts = MQTTClient_connectOptions_initializer;
    MQTTClient_message pubmsg = MQTTClient_message_initializer;
    MQTTClient_deliveryToken token;
    int rc;
​
    if ((rc = MQTTClient_create(&client, ADDRESS, CLIENTID,
        MQTTCLIENT_PERSISTENCE_NONE, NULL)) != MQTTCLIENT_SUCCESS)
    {
         printf("Failed to create client, return code %d\n", rc);
         exit(EXIT_FAILURE);
    }
​
    conn_opts.keepAliveInterval = 20;
    conn_opts.cleansession = 1;
    conn_opts.username = USERNAME;    //用户名
    conn_opts.password = PASSWORD;    //密码
    if ((rc = MQTTClient_connect(client, &conn_opts)) != MQTTCLIENT_SUCCESS)
    {
        printf("Failed to connect, return code %d\n", rc);
        exit(EXIT_FAILURE);
    }
​
    while(1){
            pubmsg.payload = PAYLOAD;
            pubmsg.payloadlen = (int)strlen(PAYLOAD);
            pubmsg.qos = QOS;
            pubmsg.retained = 0;
            if ((rc = MQTTClient_publishMessage(client, TOPIC, &pubmsg, &token)) !=
                MQTTCLIENT_SUCCESS)
            {
                printf("Failed to publish message, return code %d\n", rc);
                exit(EXIT_FAILURE);
            }
​
            printf("Waiting for up to %d seconds for publication of %s\n"
                    "on topic %s for client with ClientID: %s\n",
                    (int)(TIMEOUT/1000), PAYLOAD, TOPIC, CLIENTID);
            rc = MQTTClient_waitForCompletion(client, token, TIMEOUT);
            printf("Message with delivery token %d delivered\n", token);
            
            sleep(5);
    }
​
    MQTTClient_destroy(&client);
    return rc;
}

  

4.2 编译和测试

在ubuntu上编译代码,使用命令:

 gcc MQTTClient_publish.c -lpaho-mqtt3c

编译成功后,生成.out 文件

运行该文件,可以看见,该客户端已经能正常的发送数据:

在EMQX上可以看见,MQTT_USR2已经在线

5 MQTT.fx订阅MQTT_USR2 Topic

5.1 MQTT.fx订阅Topic

现在实现一个功能MQTT.fx订阅MQTT_USR2 Topic,根据MQTT_USR2的代码可知,其发布数据的topic 为:

在MQTT.fx上订阅该Topic: mytest

5.2 EMQX上查看数据流

登录EMQX,在客户端栏上选择当前用户,可以看见当前Client数据流的详细情况

相关推荐

  1. 如何使用EMQX搭建一个私有的MQTT服务器

    2024-03-21 08:42:01       10 阅读

最近更新

  1. TCP协议是安全的吗?

    2024-03-21 08:42:01       16 阅读
  2. 阿里云服务器执行yum,一直下载docker-ce-stable失败

    2024-03-21 08:42:01       16 阅读
  3. 【Python教程】压缩PDF文件大小

    2024-03-21 08:42:01       15 阅读
  4. 通过文章id递归查询所有评论(xml)

    2024-03-21 08:42:01       18 阅读

热门阅读

  1. 能源新动力:移动电站行业洞察报告

    2024-03-21 08:42:01       15 阅读
  2. RabbitMQ

    2024-03-21 08:42:01       20 阅读
  3. js数组去重常见方法

    2024-03-21 08:42:01       16 阅读
  4. 数据分析-Pandas数据分类处理

    2024-03-21 08:42:01       17 阅读
  5. React.js快速入门教程

    2024-03-21 08:42:01       19 阅读
  6. bert源码分析之tokenization

    2024-03-21 08:42:01       17 阅读
  7. 【Qt之·类QProcess】

    2024-03-21 08:42:01       20 阅读
  8. pytest相关面试题

    2024-03-21 08:42:01       18 阅读
  9. 【WEEK4】学习目标及总结【SpringMVC】【中文版】

    2024-03-21 08:42:01       19 阅读
  10. 理论学习:深度学习里什么是置信度

    2024-03-21 08:42:01       15 阅读
  11. C# 判断变量类型 GetType 未解决

    2024-03-21 08:42:01       16 阅读