首页 > 编程语言 >MQTT服务(C#)

MQTT服务(C#)

时间:2022-12-21 17:47:12浏览次数:43  
标签:Console C# server MQTT obj WriteLine 服务 客户端

MQTT服务(C#)

MQTT服务器(C#)

开启MQTT服务器,需要用到库MQTTnet,使用VS2019企业版。

  1. 右键管理Nuget包,搜索下载MQTTnet(3.0.16版本)并安装,Install-Package MQTTNET,出现下列提示,安装成功;

    Successfully installed 'MQTTnet 3.0.16' to MQTTNET Executing nuget actions took 2.77 min Time Elapsed: 00:02:46.6697077 ========== Finished ==========

  2. 对C#代码添加MQTTnetMQTTnet.Server命名空间的引用;

  3. 对构造函数里添加如下代码:

    public MqttServer()
    {
        server = new MqttFactory().CreateMqttServer();            
        // 客户端连接事件
        server.ClientConnectedHandler = new MqttServerClientConnectedHandlerDelegate(ClientConnectedHandler);
        //客户端断开连接事件
        server.ClientDisconnectedHandler = new MqttServerClientDisconnectedHandlerDelegate(ClientDisconnectedHandler);
        server.ApplicationMessageReceivedHandler = new MqttApplicationMessageReceivedHandlerDelegate(MessageReceivedHandler);
        server.UseApplicationMessageReceivedHandler(args =>
        {
            Console.WriteLine("===================================================");
            Console.WriteLine("收到消息:");
            Console.WriteLine($"客户端:{args.ClientId}");
            Console.WriteLine($"主题:{args.ApplicationMessage.Topic}");
            Console.WriteLine($"消息:{Encoding.UTF8.GetString(args.ApplicationMessage.Payload)}");
            Console.WriteLine("+++++++++++++++++++++++++++++++++++++++++++++++++++");
            Console.WriteLine();
        });
    }
    
    IMqttServer server;
    
  4. 开启关闭MQTT服务如下,调用StartMqttServer方法即可开启特定端口服务

    /// <summary>
    /// 打开MQTT Server 服务
    /// </summary>
    /// <param name="port">端口号:默认为1883</param>
    public async void StartMqttServer(int port = 1883)
    {
        if (server.IsStarted)
            return;
        MqttServerOptionsBuilder serverOptions = new MqttServerOptionsBuilder();
        serverOptions.WithDefaultEndpointPort(port);
        await server.StartAsync(serverOptions.Build());
    }
    
    public async void CloseMqttServer(int port = 1883)
    {
        if (!server.IsStarted)
            return;
        MqttServerOptionsBuilder serverOptions = new MqttServerOptionsBuilder();
        serverOptions.WithDefaultEndpointPort(port);
        await server.StopAsync();
    }
    
  5. 其余调用方法如下:

    private void StartedHandler(EventArgs obj)
    {
        Console.WriteLine("MQTT服务器已启动!");
    }
    
    private void StoppedHandler(EventArgs obj)
    {
        Console.WriteLine("MQTT服务器已停止!");
    }
    
    /// <summary>
    /// 客户端连接到服务器事件
    /// </summary>
    /// <param name="obj"></param>
    private void ClientConnectedHandler(MqttServerClientConnectedEventArgs obj)
    {
        Console.WriteLine($"{obj.ClientId}此客户端已连接至服务器!");
    }
    
    private void ClientDisconnectedHandler(MqttServerClientDisconnectedEventArgs obj)
    {
        Console.WriteLine($"断开连接的客户端:{obj.ClientId}");
        Console.WriteLine($"断开连接类型:{obj.DisconnectType.ToString()}");
    }
    
    /// <summary>
    /// 收到各个客户端发送的消息
    /// </summary>
    /// <param name="obj"></param>
    private void MessageReceivedHandler(MqttApplicationMessageReceivedEventArgs obj)
    {
        Console.WriteLine("===================================================");
        Console.WriteLine("收到消息:");
        Console.WriteLine($"客户端:{obj.ClientId}");
        Console.WriteLine($"主题:{obj.ApplicationMessage.Topic}");
        Console.WriteLine($"消息:{Encoding.UTF8.GetString(obj.ApplicationMessage.Payload)}");
        Console.WriteLine("+++++++++++++++++++++++++++++++++++++++++++++++++++");
        Console.WriteLine();
    }
    

标签:Console,C#,server,MQTT,obj,WriteLine,服务,客户端
From: https://www.cnblogs.com/nuan22/p/16996751.html

相关文章

  • R语言和Python用泊松过程扩展:霍克斯过程Hawkes Processes分析比特币交易数据订单到达
    全文下载链接:http://tecdat.cn/?p=25880 最近我们被客户要求撰写关于泊松过程的研究报告,包括一些图形和统计输出。本文描述了一个模型,该模型解释了交易的聚集到达,并展示......
  • 获取随机可用TCP端口号(C#)
    获取随机可用TCP端口号(C#)最近开启MQTT服务,需要获取随机可用的TCP端口号,需要两步:通过System.Net.NetworkInformation中的GetIPGlobalProperties,获取所有可用的端口号;/......
  • 5G NR - RLC协议阅读笔记 - 从LTE到NR的变化
    通过前面的学习,我们已经知道,在NR中,每个PDCPSDU形成PDCPPDU,然后形成RLCSDU,然后组成RLCPDU。由于NR里面去掉了RLC级联功能。一个RLCPDU可能包含一个RLCSDU或一个RL......
  • R语言中的时间序列分析模型:ARIMA-ARCH / GARCH模型分析股票价格|附代码数据
    全文链接:http://tecdat.cn/?p=18860最近我们被客户要求撰写关于GARCH的研究报告,包括一些图形和统计输出。时间序列分析是统计学中的一个主要分支,主要侧重于分析数据集以......
  • IfcBooleanChoose
    IfcBooleanChoose功能定义如果为TRUE,则返回第一个选项,否则返回第二个选项。 注:根据ISO/IEC10303-42:1992的定义此函数根据布尔输入参数的值返回两个选项之一。这两......
  • buuoj-pwn-starctf_2019_babyshell
    buuoj-pwn-starctf_2019_babyshell逆向分析GLIBCubuntu16,不涉及内存管理也没啥需要讲的关键函数主函数__int64__fastcallmain(__int64a1,char**a2,char**a3......
  • R语言广义相加模型 (GAMs)分析预测CO2时间序列数据|附代码数据
    全文下载链接:http://tecdat.cn/?p=20904最近我们被客户要求撰写关于GAMs的研究报告,包括一些图形和统计输出。环境科学中的许多数据不适合简单的线性模型,最好用广义相加模......
  • 关于postcss-preset-env 的配置
    postcss-preset-env可通过stage选项配置需要启用的features,默认值为2。关于不同stage启用的features,可查看官网https://preset-env.cssdb.org/features/也可以直接配置f......
  • C语言关键字和语句
    auto自动(变量类型前,一般省略了,例inta=0;其实int前就修饰了auto)break返回,一般用于循环和swith的结束,循环就直接跳出循环,case   swith语句里的判断,const 常量修饰......
  • webstorm typescript .d.ts文件 使用问题
    问题描述 webstorm中global.d.ts文件当全局变量用,不行。直接上干货,能对上你的问题就恭喜了。global.d.ts内容  tsconfig.json   直接使用,不用导入  ......