Mqtt安装及部署手册(包含与WebSocket通信配置)

本文详细介绍了如何在Windows上搭建MQTT服务器,包括下载和安装mosquitto,配置端口和匿名访问,以及启动和停止服务。接着,展示了在Winform应用中使用M2Mqtt库作为发布者发送消息,以及在Web端作为订阅者接收消息的示例代码。特别强调了可能出现的端口连接问题和权限配置。
摘要由CSDN通过智能技术生成

下载并安装MQTT

1.首先搭建起MQTT服务

1.1安装mosquitto,mosquitto是开源的MQTT代理服务器,它的Windows安装包地址:https://mosquitto.org/download/
* 这里建议下载2.0.11版本,个别版本和Socket通信会出现问题

  • 这里建议下载2.0.11版本,个别版本和Socket通信会出现问题,这个是个坑点,看下图;
  • 在这里插入图片描述

1.2 安装完成后,去安装目录下找到mosquitt.conf 文件,记事本方式打开,配置参数;
在这里插入图片描述
在这里插入图片描述

*这里的8888,mqtt通信端口,9001是WebSocket协议端口,建议额外配置一下匿名访问:allow_anonymous true;
在这里插入图片描述

1.3 接下来启动Mqtt服务;
打开cmd窗口,定位到安装目录下
执行:mosquitto_passwd.exe -c pwfile.example -u vic

设置用户名:admin 设置密码:123456

配置文件检查:
mosquitto.exe -c mosquitto.conf
未报错说明配置正确(卡着不动了,重新打开cmd,定位到安装目录,执行下面的命令即可)

端口启动

默认端口:8888

启动:mosquitto.exe

指定端口启动:mosquitto.exe -p 8888

下面就可以启动订阅者和发布者了,上面的启动窗口不要关闭哦,下面分别再打开两个cmd窗口;

①订阅者启动

-u是用户名,-P是密码,-t是主题,-h是ip,-p是端口号

mosquitto_sub.exe -h 127.0.0.1 -p 8888 -t topic -u admin -P 123456

② 发布者

mosquitto_pub.exe -h 127.0.0.1 -p 8888 -u admin -P 123456 -t topic -m “hello world 123456”

这里的主题 “topic” 两方必须保持一致,否则收不到信息

若执行发布者和订阅者命令时,若出现*“由于目标计算机积极拒绝,无法连接”**,大概率是权限问题,设一下mosquitto.conf文件的权限,这个是个坑点;

用命令:mosquitto -c mosquitto.conf -v
重启一下服务即可;

上面配置完,就可以模拟MQTT正常通信了;

Winform采集信息(发布者)

1.安装Nuget包,M2Mqtt

下面直接贴部分源码

public class ProgramName
{
// sub后的操作
static void client_MqttMsgSubscribed(object sender, MqttMsgSubscribedEventArgs e)
{
Console.Write(“订阅完成!”);

    }
    // 接受消息后的操作
    static void client_MqttMsgPublishReceived(object sender, MqttMsgPublishEventArgs e)
    {
        Console.Write("接收到消息!");

    }
    // 发布消息后的操作
    static void client_MqttMsgPublished(object sender, MqttMsgPublishedEventArgs e)
    {
        Console.Write("发送完成!");

    }
    // 关闭连接后的操作
    static void client_ConnectionClosed(object sender, EventArgs e)
    {
        Console.Write("关闭后的操作!");

    }
    // 取消sub后的操作
    static void client_MqttMsgUnsubscribed(object sender, MqttMsgUnsubscribedEventArgs e)
    {
        Console.WriteLine("链接关闭"!);
    }


 
 
    static void Main(string[] args)
    {
        string ip = "www.mqqq.com";//或者192.168.1.20 Ip地址
        string user = "admin";
        string pwd = "123456";
        string clientid = Guid.NewGuid().ToString(); // 唯一ID
        string[] topic = new string[] { "topic" };//消息主题,很重要,WebSocket那里要保持一致
             
        byte[] qosLevels = new byte[] { MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE }; 
        
        MqttClient client = new MqttClient(ip ,8888,false,null,null,MqttSslProtocols.None);//端口号很重要
        client.ProtocolVersion = MqttProtocolVersion.Version_3_1;
        Console.WriteLine(Guid.NewGuid().ToString());
        byte code = client.Connect(clientid,
                                    user, 
                                    pwd,
                                    true, 
                                    60); 
        client.MqttMsgPublishReceived += client_MqttMsgPublishReceived;
        client.MqttMsgSubscribed += client_MqttMsgSubscribed;
        client.MqttMsgUnsubscribed += client_MqttMsgUnsubscribed;
        client.MqttMsgPublished += client_MqttMsgPublished;
        client.ConnectionClosed += client_ConnectionClosed;
        client.Subscribe(topic, qosLevels); 
         string msg1 = “message121221212122”;// message
            byte[] msg = Encoding.UTF8.GetBytes(msg1);//消息必须转一下
            ushort msgId = client.Publish("tt", // topic
                                          msg, 
                                          0, 
                                          false); // 消息发送

        client.Disconnect();
        
    }
}

Web端接收信息(订阅者)

废话不多说,直接上Demo

Serial Logger and Plotter
connect end
Received:

// 将在全局初始化一个 mqtt 变量
console.log(mqtt)
const clientId = ‘mqttjs_’ + Math.random().toString(16).substr(2, 8);

<!--线上地址-->
$(function(){
   $("#butConnect").click(function(){
           //const host = 'ws://broker.emqx.io:8083/mqtt'
//const host = 'ws://broker.emqx.io:8083/mqtt'
          //const host = 'ws://broker.mqttdashboard.com:8000/mqtt'
          const host = 'ws://'+$("#mqttip").val()+':'+$("#mqttport").val()+'/mqtt'

const options = {
keepalive: 60,
clientId: clientId,
protocolId: ‘MQTT’,
protocolVersion: 4,
clean: true,
reconnectPeriod: 1000,
connectTimeout: 30 * 1000,
will: {
topic: ‘testopic’,
payload: ‘Connection Closed abnormally…!’,
qos: 0,
retain: false
},
}
console.log(‘正在连接(Connecting mqtt client)’)
const client = mqtt.connect(host, options)

client.on(‘error’, (err) => {
console.log('Connection error: ', err)
client.end()
})

client.on(‘connect’, () => {
console.log(‘连接成功(Client connected):’ + clientId)
// Subscribe
//消息名称
//client.subscribe(‘testopic’, { qos: 0 })
client.subscribe($(“#msname”).val(), { qos: 0 })
})

client.on(‘reconnect’, () => {
console.log(‘Reconnecting…’)
})
//接收消息
client.on(‘message’, (topic, message, packet) => {
console.log('收到消息:Received Message: ’ + message.toString() + '\nOn topic: ’ + topic)

$(“#received-data-list”).append(‘收到消息:Received Message: ’ + message.toString() + ‘\nOn topic: ’ + topic);
$(“#received-data-list”).append(’
’);
})
});
});

</script>

*特别注意:

这个引用很关键;
ws 协议下,必须使用上面mqtt的WebSocket端口 9001 ,千万不能错了;
若要用mqtt,请换成const host = ‘mqtt://’+KaTeX parse error: Expected 'EOF', got '#' at position 3: ("#̲mqttip").val()+…(“#mqttport”).val()+‘/mqtt’;(作者未尝试,请自行探索)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值