MQTT Client Connectivity mit .Net

Text geknüpft
Einleitung

Diese Dokumentation bietet einen umfassenden Leitfaden zum AnschlussMQTT Kundenzu unsMQTT Broker(CrystalMQ) oder jeder Broker Ihrer Wahl mit .NET. Es bietet Schritt für Schritt Anweisungen, beginnend mit der Einrichtung der Entwicklung Umwelt und umfasst die Einrichtung Verbindungen über TCP, sichere Ports und WebSocket Protokolle. Zusätzlich enthält es Richtlinien zur KonfigurationMQTT-Authentifizierung, eine sichere und zuverlässige Verbindung zwischen Ihren .NET-Anwendungen und der Broker.

Voraussetzungen

Bevor Sie beginnen, stellen Sie sicher, dass Sie die folgenden:

  • . NET SDK auf Ihrer Maschine installiert.
  • Eine MQTT Broker-Instanz läuft.

Dependance Installation

Beginnen Sie Ihre Entwicklungsumgebung durch die Installation der notwendigen. NET Bibliotheken. Sie benötigen die MQTT .NET Bibliothek, um zu erleichternMQTKommunikation in Ihr . NET-Anwendung.

dotnet hinzufügen paket MQTTnet --version ANHANG

Erstellen Sie eine neue . NET Konsolenanwendung.
Windows:

dotnet neue Konsole -n CrystalMQ

Anschluss an MQTT Broker

Dieser Abschnitt hat Code-Snippets von verschiedenen Möglichkeiten, um mit MQTT Broker zu verbinden. Stellen Sie sicher, dass der MQTT Broker unterstützt den Verbindungstyp, den Sie verwenden möchten. Auch das entsprechende erhalten Verbindungsparameter MQTT Broker (Adresse, Port, Benutzername/Passwort, CA Certificate)

MQT Über TCP

Verwenden Sie den folgenden Code, um den Client über TCP zu verbinden. Definieren Sie die Macro ADDRESS mit den Verbindungsparametern von MQTT Broker.

Für MQTT 3.3.1:

var Optionen = neue MqtClientOptionenBuilder()
. MitClientId(GenerateClientId("kristallmq_",10))
. MitTcpServer("public-mqtt-broker.bevywise.com", 1883)
.Build();
// MQTT-Client erstellen
var factory = new MqttFactory();
var mqtClient = factory.CreateMqttClient();
mqtClient.UseConnectedHandler(async e =>
{\cHFFFF}
Console.WriteLine('Connected erfolgreich mit MQTT Broker.");
})
// Anschluss an den MQTT-Broker
warten mqtClient.ConnectAsync(Optionen);

Für MQTT 5:

// Client erstellen
var Optionen = neue MqtClientOptionenBuilder()
. MitClientId(GenerateClientId("kristallmq_",10))
. MitTcpServer("public-mqtt-broker.bevywise.com", 1883)
. MitProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V500) // Verwendung MQTT Version 5.0
.Build();
// MQTT-Client erstellen
var factory = new MqttFactory();
var mqtClient = factory.CreateMqttClient();
mqtClient.UseConnectedHandler(async e =>
{\cHFFFF}
Console.WriteLine('Connected erfolgreich mit MQTT Broker.");
})
// Anschluss an den MQTT-Broker
warten mqtClient.ConnectAsync(Optionen);

MQTT über TLS / SSL

Verwenden Sie den folgenden Code, um sicher mit MQTT Broker über TLS zu verbinden. Definieren Sie die Macro ADDRESS mit den Verbindungsparametern von MQTT Broker.

// Macro ADDRESS definieren
#define ADDRESS "public-mqtt-broker.bevywise.com:8883"
var Optionen = neue MqtClientOptionenBuilder()
. MitClientId(GenerateClientId("kristallmq_", 10))
. MitTcpServer(GetHostFromAdresse(ADDRESS), GetPortFromAdresse(ADDRESS))
.WithTls(neue MqtClientOptionenBuilderTlsParameter
{\cHFFFF}
UseTls = true,
Zertifikate = neue Liste() // Fügen Sie optional Ihre Zertifikat hier
LassenUntrustedCertificates = true, // In der Produktion falsch eingestellt
IgnorierenCertificate ChainErrors = true, // In der Produktion falsch eingestellt
IgnorierenCertificateRevokation Fehler = true // In die falsche Produktion
})
.Build();
// MQTT-Client erstellen
var factory = new MqttFactory();
var mqtClient = factory.CreateMqttClient();
mqtClient.UseConnectedHandler(async e =>
(STÖHNT)
Console.WriteLine('Connected erfolgreich mit MQTT Broker.");
})
// Anschluss an den MQTT-Broker
mqtClient.ConnectAsync(Optionen);

Setzen Sie TLS-Parameter vor dem Aufruf der MQTTClient_connect, um den Client mit dem MQTTClient_connect zu verbinden MQTT Broker sicher über TLS.

Wenn der MQTT Broker in einem vertrauenswürdigen Server und der Serververifikation gehostet wird ist nicht erforderlich, der folgende Code kann verwendet werden, um TLS-Optionen einzustellen:

var Optionen = neue MqtClientOptionenBuilder()
. MitClientId(GenerateClientId("kristallmq_", 10))
. MitTcpServer(GetHostFromAdresse(ADDRESS), GetPortFromAdresse(ADDRESS))
.WithTls(neue MqtClientOptionenBuilderTlsParameter
{\cHFFFF}
UseTls = true,
LassenUntrustedCertificates = true, // Untrustierte Zertifikate zulassen
IgnorierenCertificate ChainErrors = true, // Ignorieren von Zertifikatskettenfehlern
IgnorierenCertificateRevokation Fehler = true // Ignorieren von Zertifikatsanruf Fehler
})
.Build();
// MQTT-Client erstellen
var factory = new MqttFactory();
var mqtClient = factory.CreateMqttClient();
mqtClient.UseConnectedHandler(async e =>
{\cHFFFF}
Console.WriteLine('Connected erfolgreich mit MQTT Broker.");
})
// Anschluss an den MQTT-Broker
warten mqtClient.ConnectAsync(Optionen);

Wenn der MQTT Broker ein Serverzertifikat aus einer Trusted CA ausgestellt hat, dann kann das Server-Zertifikat mit:

var Optionen = neue MqtClientOptionenBuilder()
. MitClientId(GenerateClientId("kristallmq_", 10))
. MitTcpServer(GetHostFromAdresse(ADDRESS), GetPortFromAdresse(ADDRESS))
.WithTls(neue MqtClientOptionenBuilderTlsParameter
{\cHFFFF}
UseTls = true,
Zertifikate = neue Liste() // Optionaler Client Zertifikat hier
Zertifikat Rechtlicher Handler = Kontext =>
(STÖHNT)
// Erkennen Sie den Server
zurück zur Übersicht SslPolicy Fehler == System.Net.Security.SslPolicyErrors. Keine
},
LassenUntrustedCertificates = false, // Nicht vertrauenswürdig angewandt Zertifikat
IgnorierenCertificate ChainErrors = falsch, // Nicht ignorieren Zertifikatskette Fehler
IgnorierenCertificateRevokation Fehler = falsch // Nicht ignorieren Zertifikat Ich bin nicht da.
})
.Build();
// MQTT-Client erstellen
var factory = new MqttFactory();
var mqtClient = factory.CreateMqttClient();
mqtClient.UseConnectedHandler(async e =>
(STÖHNT)
Console.WriteLine('Connected erfolgreich mit MQTT Broker.");
})
// Anschluss an den MQTT-Broker
mqtClient.ConnectAsync(Optionen);

Hat der MQTT Broker ein selbstsigniertes Server-Zertifikat, so kann das Server-Zertifikat werden mit dem Root-Zertifikat aus dem MQTT Broker überprüft:

// Root-Zertifikat laden
var rootCert = new X509Certificate2("path_of_the_root_file");
// MQTT Client Optionen konfigurieren
var Optionen = neue MqtClientOptionenBuilder()
. MitClientId(GenerateClientId("kristallmq_",10))
. MitTcpServer("public-mqtt-broker.bevywise.com", 8883)
.WithCredentials("highlysecure", "N4xnpPTru43T8Lmk") // Benutzername hinzufügen und Passwort vergessen?
.WithTls(neue MqtClientOptionenBuilderTlsParameter
{\cHFFFF}
UseTls = true,
Zertifikate = neue ListeWurzeln Cer
LassenUntrustedCertificates = true, // Deaktivierte Zertifikatskette ANHANG
IgnorierenZertifikat ChainErrors = true, // Ignorieren der Zertifikatskette Fehler
IgnorierenCertificateRevokation Fehler = true // Ignorieren von Zertifikat Ich bin nicht da.
})
.Build();
// MQTT-Client erstellen
var factory = new MqttFactory();
var mqtClient = factory.CreateMqttClient();
mqtClient.UseConnectedHandler(async e =>
(STÖHNT)
Console.WriteLine('Connected erfolgreich mit MQTT Broker.");
})
// Anschluss an den MQTT-Broker
mqtClient.ConnectAsync(Optionen);

MQTT über WebSocket

Definieren Sie die MQTT Broker Adresse wie diese, um den Client über WebSocket zu verbinden.

var Optionen = neue MqtClientOptionenBuilder()
. MitClientId(GenerateClientId("kristallmq_",10))
. MitWebSocketServer("ws://public-mqtt-broker.bevywise.com:10443/mqtt") // WebSocket Server URI verwenden
.Build();

MQTT über Secure WebSocket

Verwenden Sie den folgenden Code, um den Client über Secure WebSocket zu verbinden. Setzen Sie TLS-Optionen wie in MQTT über TLS Abschnitt angegeben.

Definieren Sie die Macro ADDRESS mit den Verbindungsparametern von MQTT Broker.

var Optionen = neue MqtClientOptionenBuilder()
. MitClientId(GenerateClientId("kristallmq_",10))
. MitWebSocketServer("ws://public-mqtt-broker.bevywise.com:11443/mqt") // WebSocket Server URI verwenden
.Build();

MQTT konfigurieren Authentifizierung

Um mit MQTT Broker zu verbinden, die MQTT Username und MQTT Password benötigt Authentifizierung, Fügen Sie Benutzername und Passwort zu den folgenden Verbindungsoptionen hinzu:

// MQTT Client Optionen konfigurieren
var Optionen = neue MqtClientOptionenBuilder()
. MitClientId(GenerateClientId("kristallmq_",10))
. MitTcpServer("public-mqtt-broker.bevywise.com", 1883)
.WithCredentials("username", "password") // Benutzername und Passwort hinzufügen
.Build();
// MQTT-Client erstellen
var factory = new MqttFactory();
var mqtClient = factory.CreateMqttClient();
mqtClient.UseConnectedHandler(async e =>
{\cHFFFF}
Console.WriteLine('Connected erfolgreich mit MQTT Broker.");
})
// Anschluss an den MQTT-Broker
warten mqtClient.ConnectAsync(Optionen);

Erweiterte Funktionen

Das letzte Testament einrichten

Konfigurieren derLetzter Wille und Testamenteine Nachricht anzugeben, die der Broker veröffentlichen wird, wenn der Client unerwartet trennt. Dies hilft anderen Abonnenten den Status des abgeschalteten Clients zu informieren.

Verwenden Sie den folgenden Code, um Last Will in den Verbindungsoptionen festzulegen:

var Optionen = neue MqtClientOptionenBuilder()
. MitClientId(GenerateClientId("kristallmq_",10))
. MitTcpServer("public-mqtt-broker.bevywise.com", 1883) // Verwenden Sie Ihren Broker Adresse und Hafen
. MitWillMessage(neue MqtApplicationMessageBuilder()
.WithTopic("will/topic")
.WithPayload("Client1 hat unerwartet abgeschaltet")
. MitQualityOfServiceLevel(MqtQualityOfServiceLevel.AtLeastOnce)
.WithRetainFlag(true)
.Build()
.Build();

Adjusting Keep Alive

MQTpflegt Client-Broker-Verbindungen mit einerIch bin nicht da.Mechanismus. Einstellen des Halteintervalls, um zu kontrollieren, wie häufig sendet der Client PINGREQ-Nachrichten an den Broker.

Ändern Sie den untenstehenden Code entsprechend Ihren Anforderungen:

var Optionen = neue MqtClientOptionenBuilder()
. MitClientId(GenerateClientId("kristallmq_",10))
. MitTcpServer("public-mqtt-broker.bevywise.com", 1883) // Verwenden Sie Ihre Broker Adresse und Hafen
. MitWillMessage(neue MqtApplicationMessageBuilder()
.WithTopic("will/topic")
.WithPayload("Client1 hat unerwartet abgeschaltet")
. MitQualityOfServiceLevel(MqtQualityOfServiceLevel.AtLeastOnce)
.WithRetainFlag(true)
.Build()
.Build();

Sitzungspersistenz konfigurieren

Sitzungsdaten einerMQT !die Abschriften des Kunden und alle Daten, die die Client würde mit QoS>0 empfangen. Der Client kann dieMQT Brokerseine Sitzungsdaten über Verbindungen speichern.

MQTT 3.1.1 Clients können Clean Session = 0 festlegen, um den MQTT Broker zu bitten, seine Sitzung Informationen über Verbindungen gespeichert.

Für MQTT 3.1.1:

var Optionen = neue MqtClientOptionenBuilder()
. MitClientId(GenerateClientId("kristallmq_", 10))
. MitTcpServer("public-mqtt-broker.bevywise.com", 1883) // Verwenden Sie Ihre Broker Adresse und Hafen
.WithCleanSession(false) // CleanSession auf false setzen, um Sitzung zu halten Informationen
. MitProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V311) // Verwendung MQTT Version 3.1.1
.Build();

MQT 5 Clients können Clean Start = 0 und Session Expiry Interval = 'N', um den MQTT Broker zu bitten, seine Sitzungsinformationen über Verbindungen für 'N' Sekunden.

Für MQTT 5:

var Sitzung ExpiryInterval = 3600; // Sitzungsablaufintervall bis 3600 festlegen Sekunden (1 Stunde)
var Optionen = neue MqtClientOptionenBuilder()
. MitClientId(GenerateClientId("kristallmq_", 10))
. MitTcpServer("public-mqtt-broker.bevywise.com", 1883) // Verwenden Sie Ihre Broker Adresse und Hafen
.WithCleanStart(false) // CleanStart auf false setzen
. WithSessionExpiryInterval(((uint)sessionExpiryInterval) // Sitzung einstellen Ausführendes Intervall
. MitProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V500) // Verwendung MQTT Version 5.0
.Build();

Maximal Packungsgröße

MQTT5 Client kann den MQTT Broker anfordern, nur Datenpakete weniger als ein spezifische Größe, indem Sie es so einstellen:

Für MQTT 5:

var maxPacketSize = 1024; // Beispiel: Maximale Paketgröße auf 1024 einstellen Bytes
var Optionen = neue MqtClientOptionenBuilder()
. MitClientId(GenerateClientId("kristallmq_", 10))
. MitTcpServer("public-mqtt-broker.bevywise.com", 1883) // Verwenden Sie Ihre Broker Adresse und Hafen
. MitReceiveMaximum(maxPacketSize) // Setzen Sie ReceiveMaximum zu begrenzen Paket Größe
. MitProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V500) // Verwendung MQTT Version 5.0
.Build();

Publizieren

Daten senden

Effizient Daten an mehrere Abonnenten verteilen, indem sie an benannte Abonnenten publiziert werden Themen mit dem folgenden Code-Snippet:

Für MQTT 3.1.1:

mqtClient.UseConnectedHandler(async e =>
{\cHFFFF}
Console.WriteLine('Connected erfolgreich mit MQTT Broker."); // Eine Nachricht veröffentlichen
var message = new MqttApplicationMessageBuilder()
.WithTopic("cmq/topic")
.WithPayload("Hello CrystalMQ")
. Mit genauen Angaben
.WithRetainFlag()
.Build();
warten mqtClient.PublishAsync(message);
Console.WriteLine("Message veröffentlicht.");
})

Für MQTT 5:

mqtClient.UseConnectedHandler(async e =>
{\cHFFFF}
Console.WriteLine('Connected erfolgreich mit MQTT Broker.");
// Mitteilung veröffentlichen
var message = new MqttApplicationMessageBuilder()
.WithTopic("cmq/topic")
.WithPayload("Hello CrystalMQ")
. MitQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce)
.WithRetainFlag(true)
.Build();
var result = erwartet mqtClient. PublishAsync(message);
Console.WriteLine($"Message veröffentlicht (Ergebnis: {result.ReasonString}).");
})

Festhaltene Nachrichten einstellen

Aktivieren Sie die Rückhalte-Flag bei der Veröffentlichung einer Nachricht, um sicherzustellen, dass der Broker speichert die letzte Nachricht für jedes Thema. Dies garantiert, dass neue Abonnenten die jüngste Nachricht erhalten verbinden.

Um dies zu implementieren, verwenden Sie den folgenden Code snippet:

var message = new MqttApplicationMessageBuilder()
.WithTopic("cmq/topic")
.WithPayload("Hello CrystalMQ")
. MitQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce)
.WithRetainFlag(true) // Aktivieren Sie die Flagge
.Build();

QoS Levels angeben

MQTT bietet drei Ebenen der Qualität des Dienstes (QoS) für die Nachrichtenlieferung:

  • QoS 0 (am meisten einmal)
  • QoS 1 (zumindest einmal)
  • QoS 2 (genau einmal)

Geben Sie bei der Veröffentlichung von MQTT den erforderlichen QoS-Level an Nachrichten mit diesem Code:

// Eine Nachricht mit QoS 0 veröffentlichen
var messageQoS0 = new MqtApplicationMessageBuilder()
.WithTopic("cmq/topic")
.WithPayload("QoS 0: Hallo CrystalMQ")
. MitQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce)
.WithRetainFlag(true) // Retain Flag kann bei Bedarf eingestellt werden
.Build();
// Eine Nachricht mit QoS 1 veröffentlichen
var messageQoS1 = new MqtApplicationMessageBuilder()
.WithTopic("cmq/topic")
.WithPayload("QoS 1: Hallo CrystalMQ")
. MitQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.AtLeastOnce)
.WithRetainFlag(true) // Retain Flag kann bei Bedarf eingestellt werden
.Build();
// Eine Nachricht mit QoS 2 veröffentlichen
var messageQoS2 = new MqtApplicationMessageBuilder()
.WithTopic("cmq/topic")
.WithPayload("QoS 2: Hello CrystalMQ")
. MitQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce)
.WithRetainFlag(true) // Retain Flag kann bei Bedarf eingestellt werden
.Build();

Nachricht abbrechen Intervall

Die Eigenschaft 'Message Ablaufintervall' setzt die Lebensdauer einer Nachricht in Sekunden; wenn undelivered innerhalb dieser Zeit, der Broker verworfen es. MQTT5 unterstützt diese Funktion. MQTT5 Clients können dies während der Veröffentlichung von Daten festlegen.

Für MQTT 5:

var message = new MqttApplicationMessageBuilder()
.WithTopic("test/topic")
.WithPayload("Hallo, MQTT!")
. MitMessageExpiryInterval(300) // 300 Sekunden = 5 Minuten
.Build();

Thema Alias

Die Eigenschaft 'Topic Alias' ermöglicht es Kunden, einen kurzen Alias anstelle eines vollen Name des Themas, die Größe von Nachrichtenpaketen zu reduzieren und die Netzeffizienz zu verbessern.

Für MQTT 5:

var message = new MqttApplicationMessageBuilder()
.WithTopic("cmq/topic")
.WithPayload("Hello, CrystalMQ")
.WithTopicAlias(1) // Alias für 'cmq/topic '
.Build();

Eigenschaften, die mit MQTT PUBLISH verbunden sind, verbessern das Nachrichtenhandling, Bereitstellung von Kontext oder Anweisungen für Broker und Kunden. Diese Eigenschaften, einschließlich Nachrichten-Ablaufintervalle und Themen-Aliase, optimieren die Nachrichten-Lieferung und Netzwerkbandbreite.

Anmeldung

Anmeldung zum Thema Filter

Um von anderen Clients veröffentlichte Daten zu erhalten, muss dieser Client abonnieren Sie ein passendes Thema Filter wie folgt:

mqtClient.UseConnectedHandler(async e =>
{\cHFFFF}
Console.WriteLine('Connected erfolgreich mit MQTT Broker.");
// Ein Thema eintragen
warten mqtClient.SubscribeAsync(neu
MQTTnet.Client.Abonnieren.MqttClientAbonnieren OptionenBuilder()
.WithTopicFilter(f => f.WithTopic("cmq/topic")).Build());
Console.WriteLine("Beschrieben zum Thema.");
})

Dieses Thema Filter kann mit einem genauen Thema übereinstimmen oder es kann Wildcards wie # und +

Datenerfassung

Um die für die Abonnements gesendeten Daten zu erhalten, muss eine Callback-Funktion definiert werden wie folgt:

mqtClient.UseApplicationMessageReceivedHandler(e =>
{\cHFFFF}
Console.WriteLine($"Receive message zum Thema
'{e.ApplicationMessage.Topic}':
{Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
})

Anmeldung von Themen

Um die Aktualisierungen eines Themas zu stoppen, verwenden Sie den zur Abmeldung vorgesehenen Code.

// Abonnieren des Themas
mqtClient.UnsubscribeAsync("cmq/topic");
Console.WriteLine("Bezeichnet vom Thema.");

Den Client deaktivieren

Stellen Sie eine ordnungsgemäße Beendigung der Verbindung Ihres Kunden mit dem Broker zu Vermeidung von Problemen und Ressourcenlecks auf beiden Seiten, wodurch die Systemstabilität beibehalten wird.

Verwenden Sie den folgenden Code, um den Client vom Broker zu trennen:

mqtClient.UseDisconnectedHandler(async e =>
(STÖHNT)
Console.WriteLine("Disconnected from MQTT broker.");
// Optionale Handhabe hier die Reconnection-Logik
})
mqtClient.DisconnectAsync();

Bauen Sie Ihre Business Logic

Sie haben die Möglichkeit, Ihre eigene komplizierte Geschäftslogik zu entwickeln und anzupassen in dieser Umgebung, genau auf Ihre spezifischen Bedürfnisse und Ziele zugeschnitten.

Implementierung von Best Practices

Einzigartiges Kunden-ID-Management

Jedem Gerät eine eindeutige Client-ID zur ordnungsgemäßen Identifizierung zuweisen. Privat Fälle, individuelle IDs an einzelne Kunden zuweisen. In gemeinsamen Umgebungen, befestigen Sie eine zufällige zu jeder Client-ID, um die Einzigartigkeit zu gewährleisten.

Datendesign

Planen Sie Ihre Datenstruktur im Voraus. Ob es um Klartext geht oder JSON-formatierte Daten oder Zahlen, sorgen für eine effektive Gestaltung von Daten, die zu Ihrem Anwendung/Verwendung/benötigt.

Robuste Fehlerbehandlung

Implementieren Sie eine starke Fehlerverwaltung, um MQTT-Verbindungsausfälle zu bewältigen, Abonnement Probleme, und Nachrichtenveröffentlichungsfehler effektiv.

Sicherung von Anmeldeinformationen

Schutz sensibler Informationen wie Benutzernamen, Passwörter und Client-IDs durch nicht Sie in Ihrem Quellcode festcodieren. Verwenden Sie stattdessen Umgebungsvariablen oder sichere Konfigurationsdateien.

Regelmäßige Prüfung und Überwachung

Kontinuierlich testen Sie MQTT-Kommunikation und überwachen Sie Client Metriken wie z.B. Anschluss Status, Nachrichtendurchsatz und Fehlerraten, um Probleme schnell zu identifizieren und zu beheben.

Optimierung des Sitzungsmanagements

Wählen Sie zwischen sauberen und persistenten Sessions (`clean: true` oder `clean: false`) basierend auf Ihre Notwendigkeit, Abonnements und gelöschte Nachrichten über Client-Verbindungen zu behalten.

Reconnect auf Disconnect

Code hinzufügen, um zu versuchen, die Verbindung zum MQTT Broker, wenn es ein unerwartetes Ausschalten. Dies wird sicherstellen, dass Ihr Kunde verbunden bleibt und nicht verliert alle Daten.

Code herunterladen

Laden Sie den vollständigen Code für den Client herunter, der verwendet wird. NET MQTT Client-Bibliothek, um mit unserem Broker oder einem Broker Ihrer Wahl zu verbinden.

Für MQTT 3.1.1:

mit System;
mit System. Sammlungen. Generisch;
Verwendung System.Security.Cryptography.X509Certificates;
mit System. Text:
mit System. Threading. Aufgaben;
mit MQTTnet;
mit MQTTnet.Client
Klasse Programm
{\cHFFFF}
statischer Async Task Main(string[] args)
{\cHFFFF}
// Root-Zertifikat laden
//var rootCert = new X509Certificate2("path_of_the_root_file");
// MQTT Client Optionen konfigurieren
var Optionen = neue MqtClientOptionenBuilder()
. MitClientId(GenerateClientId("kristallmq_",10))
. MitTcpServer("public-mqtt-broker.bevywise.com", 1883) // TLS-Änderung aktivieren Hafen 8883
//.WithWebSocketServer("ws://public-mqtt-broker.bevywise.com:10443/mqtt") // Verwenden Sie WebSocket Server URI und aktivieren Sie TLS Änderung Port 11443
// .WithCredentials("username", "password") // Benutzername und Passwort hinzufügen
//
// .WithTls(neue MqtClientOptionenBuilderTlsParameter
~
// UseTls = true,
// Zertifikate = neue ListeWurzeln Cer
// LassenUntrusted Zertifikate = true, // Deaktivierte Zertifikatskette ANHANG
// IgnorierenCertificate ChainErrors = true, // Ignorieren der Zertifikatskette Fehler
// IgnorierenZertifikat Revokation Fehler = true // Ignorieren von Zertifikat Ich bin nicht da.
//
.Build();
// MQTT-Client erstellen
var factory = new MqttFactory();
var mqtClient = factory.CreateMqttClient();
// Client-Events ausschalten
mqtClient.ConnectedAsync += async e=>
(STÖHNT)
Console.WriteLine('Connected erfolgreich mit MQTT Broker.");
Ein Das ist ein Thema
Warten Sie mqtClient. SubscribeAsync(neu MqttClientSubscribeOptionenBuilder(). MitTopicFilter(f) f.WithTopic("cmq/topic")).Build());
Console.WriteLine("Beschrieben zum Thema".
// Mitteilungen veröffentlichen
var message = new MqttApplicationMessageBuilder()
.WithTopic("cmq/topic")
.WithPayload("Hello CrystalMQ")
.Build();
warten mqtClient.PublishAsync(message);
Console.WriteLine("Message veröffentlicht.");
};
mqtClient.DisconnectedAsync += async e =>
(STÖHNT)
Console.WriteLine("Disconnected from MQTT Broker.");
erwartete Aufgabe.Delay(TimeSpan.FromSeconds(5));
Das ist doch alles.
(STÖHNT)
mqtClient.ConnectAsync(Optionen);
}
Fangmenge
(STÖHNT)
Console.WriteLine("Reconnecting fail.");
}
};
mqtClient.ApplicationMessageReceivedAsync += e =>
(STÖHNT) Console.WriteLine($"Received message: {System.Text.Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
zurück zur Übersicht In den Warenkorb
};
// Anschluss an den MQTT-Broker
mqtClient.ConnectAsync(Optionen);
Englisch Sie haben die Möglichkeit
Console.WriteLine("Druckgeschmack zum Aussteigen");
Konsole.ReadLine();
In den Warenkorb Id(String Prefix, Int Länge)
(STÖHNT)
const string chars = „ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789“;
var random = new Random();
var random Chars = neue Char[Länge];
für (in i = 0; i < Länge; i++)
(STÖHNT)
randomChars[i] = chars[random.Next(chars.Length)];
}
zurück Präfix + neue Zeichenkette(randomChars);
}
}

Für MQTT 5:

mit System;
mit System. Sammlungen. Generisch;
Verwendung System.Security.Cryptography.X509Certificates;
mit System. Text:
mit System. Threading. Aufgaben;
mit MQTTnet;
mit MQTTnet.Client;
Klasse Programm
{\cHFFFF}
statischer Async Task Main(string[] args)
{\cHFFFF}
var Optionen = neue MqtClientOptionenBuilder()
. MitClientId(GenerateClientId("kristallmq_",10))
. MitTcpServer("public-mqtt-broker.bevywise.com", 1883)
//.WithWebSocketServer("ws://public-mqtt-broker.bevywise.com:10443/mqtt")
// .WithCredentials("username", "password") // Benutzername und Passwort hinzufügen
. MitProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V500) //wenn Sie mqtt-Version verwenden 5. Anmerkung: TLS aktivieren ist nicht Unterstützung Version 5
.Build();
// MQTT-Client erstellen
var factory = new MqttFactory();
var mqtClient = factory.CreateMqttClient();
// Client-Events ausschalten
mqtClient.ConnectedAsync += async e =>
{\cHFFFF}
Console.WriteLine('Connected erfolgreich mit MQTT Broker.");
// Ein Thema eintragen
warten mqtClient.SubscribeAsync(neu MqttClientSubscribeOptionenBuilder(). MitTopicFilter(f => f.WithTopic("cmq/topic")).Build());
Console.WriteLine("Beschrieben zum Thema.");
// Mitteilung veröffentlichen
var message = new MqttApplicationMessageBuilder()
.WithTopic("cmq/topic")
.WithPayload("Hello CMQ")
. MitQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce)
.WithRetainFlag(true)
.Build();
warten mqtClient.PublishAsync(message);
Console.WriteLine("Message veröffentlicht.");
};
mqtClient.DisconnectedAsync += async e =>
{\cHFFFF} Console.WriteLine("Disconnected from MQTT Broker.");
erwarten Task.Delay(TimeSpan.FromSeconds(5));
Versuch
{\cHFFFF}
warten mqtClient.ConnectAsync(Optionen);
}
Fangmenge
{\cHFFFF}
Console.WriteLine("Reconnecting fail.");
}
};
mqtClient.ApplicationMessageReceivedAsync += e =>
{\cHFFFF}
Console.WriteLine($"Received message: {System.Text.Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
zurück Task.Komplett Aufgabe
};
// Anschluss an den MQTT-Broker
warten mqtClient.ConnectAsync(Optionen);
// Halten Sie die Anwendung laufen
Console.WriteLine("Drucktaste zum Aussteigen");
Konsole.ReadLine();
Private statische String GenerateClientId(String Prefix, Int Länge)
{\cHFFFF}
const string chars = „ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789“;
var random = new Random();
var random Chars = neue Char[Länge];
für (in i = 0; i < Länge; i++)
{\cHFFFF}
randomChars[i] = chars[random.Next(chars.Length)];
}
zurück Präfix + neue Zeichenkette(randomChars);
}
}

Ausführender Bundle erstellen

Hier ist, wie dieser C-Client mit gcc-Compiler zu einem ausführbaren kompiliert werden kann.

Verwendung von .Net SDK :

Um das Programm zu kompilieren und auszuführen, verwenden Sie den folgenden Befehl:

Das ist nicht möglich.

Dieser Befehl wird Ihre Anwendung erstellen und ausführen, und Sie sollten die Ausgabe in der Terminal.

Bauen Sie das Projekt (optional):

Wenn Sie das Projekt kompilieren möchten, ohne es auszuführen, verwenden Sie:

wohnzimmer

Die kompilierten Binaries befinden sich im Bin-Verzeichnis in Ihrem Projektordner.

Mit Visual Studio:

ANHANG Das Programm kompilieren und ausführen:

  • "Start" (Grüne Wiedergabegeschmack) oder drücken Sie F5, um Ihre Anwendung.
  • Die Ausgabe wird im Fenster "Output" oder im Konsolenfenster angezeigt, das öffnet.
2. Bauen Sie das Projekt (optional):
  • Um das Projekt ohne Laufen zu bauen, gehen Sie in das Menü "Build" und wählen Sie "Build" Lösung" oder drücken Sie Ctrl+Shift+B.
  • Die Welt der Welt Binaries befinden sich im Bin-Verzeichnis verteilt Ordner.

Verbinden Sie Ihren Kunden mit unserem hochmodernenDas ist mein Freund(CrystalMQ) oder einen Broker Ihrer Wahl. Diese leistungsstarke Kombination gewährleistet optimale Leistung und Zuverlässigkeit für alle Ihre Messaging-Anforderungen, den Weg für eine robuste und effiziente Systemintegration.