2.1.3.Install M2Mqtt by Nuget, Example code

  • 1.Requirement: .NET Framework 4.5

  • 2.Open Nuget console and input "Install-Package M2Mqtt"

  • 3.Example code:

    • 1.Publisher:

      using System;
      using System.Collections.Generic;
      using System.Linq;
      using System.Text;
      using System.Threading;
      using System.Threading.Tasks;
      using uPLibrary.Networking.M2Mqtt;
      using uPLibrary.Networking.M2Mqtt.Messages;
      
      namespace MQTTPublisher
      {
          class Program
          {
              static void Main(string[] args)
              {
                  var id = args[0];
                  var topic = args[1];
      
                  MqttClient client = new MqttClient("127.0.0.1");
                  //若有輸入user, password, 接收端也要一樣的user, password
                  client.Connect(id);
      
                  //若要知道有沒有發送出去可以增加監聽發送後的Event
                  client.MqttMsgPublished += new MqttClient.MqttMsgPublishedEventHandler(client_MqttMsgPublished);
                  Stopwatch sw = new Stopwatch();
                  sw.Start();
                  for (int i = 0; i < 10000; i++)
                  {
                      //publish 最後一的parameter 是retain, 會決定是否保留著最後一個message 
                      ushort t = client.Publish(topic, Encoding.UTF8.GetBytes("XXXXXtestmessage, "
            + Guid.NewGuid().ToString() + DateTime.Now.ToString("yyyy/MM/dd HH:mm:ss") + ", times: " + i),
                      MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE, true);
                      //
                      Thread.Sleep(1000);
                  }
                  sw.Stop();
                  Console.WriteLine("花費時間..... {0}", sw.Elapsed);
                  //Console.ReadLine();
                  client.Disconnect();

              }
              private static void client_MqttMsgPublished(object sender, MqttMsgPublishedEventArgs e)
              {
                  Console.WriteLine("Message Published");
                  Console.WriteLine(e.IsPublished);
                  Console.WriteLine(e.MessageId);
              }
          }
      }
  • 2.Subscriber:

        using System;
        using System.Collections.Generic;
        using System.Linq;
        using System.Text;
        using System.Threading;
        using System.Threading.Tasks;
        using uPLibrary.Networking.M2Mqtt;
        using uPLibrary.Networking.M2Mqtt.Messages;

        namespace MQTTSubscriber
        {
            class Program
            {
                static void Main(string[] args)
                {
                    var id = args[0];
                    var topic = args[1];

                    MqttClient client = new MqttClient("127.0.0.1");

                    //如果有出現相同的id 會把前一個id 給踢掉
                    //要與發送端相同
                    client.Connect(id);

                    //topic 可以使用 topic1/#, topic2/+ 去接收相似的topic ,有點類似 sql like 的功能但限制較多
                    string[] topic2 = { topic };

                    byte[] qoslevels = { MqttMsgBase.QOS_LEVEL_AT_LEAST_ONCE };

                    client.Subscribe(topic2, qoslevels);

                        client.MqttMsgPublishReceived += new MqttClient.MqttMsgPublishEventHandler(client_PublishArrived);


                    //client.MqttMsgPublishReceived += new MqttClient.MqttMsgPublishEventHandler(client_PublishArrived);

                    //Thread.Sleep(100000);
                    Console.ReadLine();
                    client.Disconnect();
                }
                private static void client_PublishArrived(object sender, MqttMsgPublishEventArgs e)
                {
                    Console.WriteLine("Message Received");
                    Console.WriteLine(e.Topic);
                    Console.WriteLine(Encoding.UTF8.GetString(e.Message));
                }
            }
        }
  • 4.心得:

    • 1.Publisher與Subscriber的ID不要相同

    • 2.Publisher與Subscriber的Topic要相同

Last updated