[![Build Status](https://img.shields.io/nuget/v/MQTTnet.svg)](https://www.nuget.org/packages/MQTTnet/) # MQTTnet MQTTnet is a .NET library for MQTT based communication. It provides a MQTT client and a MQTT server. The implementation is based on the documentation from http://mqtt.org/. ## Features * MQTT client included * MQTT server (broker) included * TLS 1.2 support for client and server (but not UWP servers) * Async support * List of connected clients available (server only) * Extensible communication channels (i.e. In-Memory, TCP, TCP+SSL, WebSockets (not included in this project)) * Access to internal trace messages * Extensible client credential validation (server only) * Unit tested (48+ tests) * Lightweight (only the low level implementation of MQTT, no overhead) ## Supported frameworks * .NET Standard 1.1+ * .NET Core 1.1+ * .NET Core App 1.1+ * .NET Framework 4.5.2+ (x86, x64, AnyCPU) * Universal Windows (UWP) 10.0.10240+ (x86, x64, ARM, AnyCPU) ## Supported MQTT versions * 3.1.1 ## Nuget This library is available as a nuget package: https://www.nuget.org/packages/MQTTnet/ ## Contributions If you want to contribute to this project just create a pull request. ## References This library is used in the following projects: * HA4IoT (Open Source Home Automation system for .NET, https://github.com/chkr1011/HA4IoT) If you use this library and want to see your project here please let me know. # MqttClient ## Example ```c# var options = new MqttClientOptions { Server = "localhost" }; var client = new MqttClientFactory().CreateMqttClient(options); client.ApplicationMessageReceived += (s, e) => { Console.WriteLine("### RECEIVED APPLICATION MESSAGE ###"); Console.WriteLine($"+ Topic = {e.ApplicationMessage.Topic}"); Console.WriteLine($"+ Payload = {Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}"); Console.WriteLine($"+ QoS = {e.ApplicationMessage.QualityOfServiceLevel}"); Console.WriteLine($"+ Retain = {e.ApplicationMessage.Retain}"); Console.WriteLine(); }; client.Connected += async (s, e) => { Console.WriteLine("### CONNECTED WITH SERVER ###"); await client.SubscribeAsync(new List