.Net との MQTT クライアントの接続性

テキストコピッド
導入事例

このドキュメントは、接続に関する包括的なガイドを提供しますMQTTクライアントお問い合わせMQTTブローカー(クリスタルMQ) あなたの選択のブローカー .NET の使用 開発をセットアップし始めてステップバイステップの指示を提供します 環境方針 そしてカバー確立 TCP、セキュアポート、WebSocketプロトコルによる接続。 また、設定のガイドラインも含まれています。MQTT認証, 安全かつ信頼性の高い接続を確保 .NET アプリケーションおよびブローカー。

前提条件

始める前に、次のことを確かめて下さい:

  • お問い合わせ お使いのマシンにNET SDKをインストールします。
  • MQTT ブローカーインスタンスの実行。

依存性インストール

まずは、必要なインストールで開発環境を設定してください。 ネットワーク ライブラリ。 MQTT .NETライブラリが必要です。MQTTの特長コミュニケーション お問い合わせ NET アプリケーション

dotnet パッケージを追加 MQTTnet --バージョン 4.3.6.1152

新規作成 NET コンソール アプリケーション。
Windows:

dotnet 新しいコンソール -n CrystalMQ

MQTTブローカーに接続する

このセクションには、MQTT ブローカーに接続するさまざまな方法のコードスニペットがあります。 確認する MQTTブローカー 使用する接続タイプをサポートしています。 また、対応する取得 接続パラメータの接続 MQTTブローカー(住所、ポート、ユーザー名/パスワード、CA証明書)

MQTTの特長 TCP で

クライアントを TCP に接続するために、次のコードを使用します。 MQTT Brokerの接続パラメータを使用してマクロADDRESSを定義します。

MQTT 3.3.1 のため:

var オプション = 新しい MqttClientOptionsBuilder()
. . withClientId(GenerateClientId("crystalmq_",10) )
. . © 2018 www.securehotelsreservations.com 著作権所有
.ビルド();
// MQTT クライアントを作成する
var 工場 = 新しい MqttFactory();
var mqttClient = factory.CreateMqttClient() ;
mqttClient.UseConnectedHandler(非同期e =>)
お問い合わせ
Console.WriteLine("MQTTブローカーと正常に接続)。
お問い合わせ
// MQTT ブローカーに接続する
mqttClient.ConnectAsync(options) を待ちます。

MQTT 5のため:

// クライアントを作成する
var オプション = 新しい MqttClientOptionsBuilder()
. . withClientId(GenerateClientId("crystalmq_",10) )
. . © 2018 www.securehotelsreservations.com 著作権所有
. . withProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V500) // 使用 MQTT バージョン 5.0
.ビルド();
// MQTT クライアントを作成する
var 工場 = 新しい MqttFactory();
var mqttClient = factory.CreateMqttClient() ;
mqttClient.UseConnectedHandler(非同期e =>)
お問い合わせ
Console.WriteLine("MQTTブローカーと正常に接続)。
お問い合わせ
// MQTT ブローカーに接続する
mqttClient.ConnectAsync(options) を待ちます。

TLS/SSL上のMQTT

以下のコードを使用して、TLS 上で MQTT ブローカーに安全に接続します。 MQTT Brokerの接続パラメータを使用してマクロADDRESSを定義します。

// マクロアドレスを定義する
#define ADDRESS "public-mqtt-broker.bevywise.com:8883"
var オプション = 新しい MqttClientOptionsBuilder()
. . withClientId(GenerateClientId("crystalmq_"、10)) により
. . withTcpServer(GetHostFromAddress(ADDRESS)、GetPortFromAddress(ADDRESS))
.WithTls (新しいMqttClientOptionsBuilderTlsParameters)
お問い合わせ
useTls = true,
証明書 = 新しいリスト(), // オプションで追加 証明書はこちら
AllowUntrustedCertificates = true, // ディレクティブ 生産で偽造される
無視証明書 ChainErrors = true, // // // // 生産で偽造される
IgnoreCertificateの取消 エラー = true // 虚偽の設定 生産工程
お問い合わせ
.ビルド();
// MQTT クライアントを作成する
var 工場 = 新しい MqttFactory();
var mqttClient = factory.CreateMqttClient() ;
mqttClient.UseConnectedHandler(非同期e =>)
お問い合わせ
Console.WriteLine("MQTTブローカーと正常に接続)。
お問い合わせ
// MQTT ブローカーに接続する
mqttClient.ConnectAsync(options) を待ちます。

MQTTClient_connect を呼び出す前に TLS パラメータを設定し、クライアントをクライアントに接続します。 MQTT ブローカーは、TLS 上で安全です。

MQTTブローカーが信頼できるサーバーとサーバーの検証でホストされている場合 TLSオプションを設定するには、次のコードを使用できません。

var オプション = 新しい MqttClientOptionsBuilder()
. . withClientId(GenerateClientId("crystalmq_"、10)) により
. . withTcpServer(GetHostFromAddress(ADDRESS)、GetPortFromAddress(ADDRESS))
.WithTls (新しいMqttClientOptionsBuilderTlsParameters)
お問い合わせ
useTls = true,
信頼できない証明書 = true, // // // // 信頼できない証明書を許可する
無視証明書 ChainErrors = true, // エラー 証明書チェーンエラーを無視する
IgnoreCertificateの取消 エラー = true // 証明書の取消 エラー
お問い合わせ
.ビルド();
// MQTT クライアントを作成する
var 工場 = 新しい MqttFactory();
var mqttClient = factory.CreateMqttClient() ;
mqttClient.UseConnectedHandler(非同期e =>)
お問い合わせ
Console.WriteLine("MQTTブローカーと正常に接続)。
お問い合わせ
// MQTT ブローカーに接続する
mqttClient.ConnectAsync(options) を待ちます。

MQTT ブローカーに Trusted CA から発行された Server 証明書がある場合、 その後、サーバー証明書は、次の方法で検証できます。

var オプション = 新しい MqttClientOptionsBuilder()
. . withClientId(GenerateClientId("crystalmq_"、10)) により
. . withTcpServer(GetHostFromAddress(ADDRESS)、GetPortFromAddress(ADDRESS))
.WithTls (新しいMqttClientOptionsBuilderTlsParameters)
お問い合わせ
useTls = true,
証明書 = 新しいリスト(), // オプションでクライアントを追加 証明書はこちら
認証評価 ハンドラ = コンテキスト =>
お問い合わせ
// カスタムサーバ証明書検証ロジック
コンテキストを返す。 SslPolicyErrors ========= システム.Net.Security.SslPolicyErrors. なし;
お問い合わせ
AllowUntrustedCertificates = false, // ディレクティブ 不信を許さない 証明書
無視証明書 チェーンエラー = false, // 証明書チェーンを無視しないでください エラー
IgnoreCertificateの取消 エラー = false // 証明書を無視しないでください 呼び出しエラー
お問い合わせ
.ビルド();
// MQTT クライアントを作成する
var 工場 = 新しい MqttFactory();
var mqttClient = factory.CreateMqttClient() ;
mqttClient.UseConnectedHandler(非同期e =>)
お問い合わせ
Console.WriteLine("MQTTブローカーと正常に接続)。
お問い合わせ
// MQTT ブローカーに接続する
mqttClient.ConnectAsync(options) を待ちます。

MQTTブローカーに自己署名されたサーバー証明書がある場合、サーバー証明書は お問い合わせ MQTTブローカーから入手したルート証明書を使用して検証:

// ルート証明書をロードする
var rootCert = 新しい X509Certificate2("path_of _the_root_file");
// MQTT クライアントオプションの設定
var オプション = 新しい MqttClientOptionsBuilder()
. . withClientId(GenerateClientId("crystalmq_",10) )
. . © 2019 www.securehotelsreservations.com 著作権所有
.WithCredentials("highlysecure", "N4xnpPTru43T8Lmk") // ユーザー名を追加 パスワード
.WithTls (新しいMqttClientOptionsBuilderTlsParameters)
お問い合わせ
useTls = true,
証明書 = 新しいリストお問い合わせ
AllowUntrustedCertificates = true, // ディレクティブ 無効な証明書チェーン 検証
無視証明書 ChainErrors = true, // エラー 証明書チェーンを無視する エラー
IgnoreCertificateの取消 エラー = true // 無視証明書 呼び出しエラー
お問い合わせ
.ビルド();
// MQTT クライアントを作成する
var 工場 = 新しい MqttFactory();
var mqttClient = factory.CreateMqttClient() ;
mqttClient.UseConnectedHandler(非同期e =>)
お問い合わせ
Console.WriteLine("MQTTブローカーと正常に接続)。
お問い合わせ
// MQTT ブローカーに接続する
mqttClient.ConnectAsync(options) を待ちます。

WebSocket 経由で MQTT

クライアントをWebSocketに接続するために、このようなMQTTブローカーアドレスを定義します。

var オプション = 新しい MqttClientOptionsBuilder()
. . withClientId(GenerateClientId("crystalmq_",10) )
. . WithWebSocketServer("ws://public-mqtt-broker.bevywise.com:10443/mqtt") // // // // WebSocket サーバー URI を使用する
.ビルド();

セキュアなWebSocket上MQTT

Secure WebSocket 上でクライアントを接続するには、以下のコードを使用します。 TLS オプションを TLS セクションに MQTT で指定するように設定します。

MQTT Brokerの接続パラメータを使用してマクロADDRESSを定義します。

var オプション = 新しい MqttClientOptionsBuilder()
. . withClientId(GenerateClientId("crystalmq_",10) )
. . WithWebSocketServer("ws://public-mqtt-broker.bevywise.com:11443/mqtt") // // // // WebSocket サーバー URI を使用する
.ビルド();

MQTT の設定 認証

MQTT ユーザー名と MQTT パスワードが必要な MQTT ブローカーに接続するには 認証, このような接続オプションにユーザー名とパスワードを追加します。

// MQTT クライアントオプションの設定
var オプション = 新しい MqttClientOptionsBuilder()
. . withClientId(GenerateClientId("crystalmq_",10) )
. . © 2018 www.securehotelsreservations.com 著作権所有
.WithCredentials("username"、"password") // は、 ユーザー名とパスワードの追加
.ビルド();
// MQTT クライアントを作成する
var 工場 = 新しい MqttFactory();
var mqttClient = factory.CreateMqttClient() ;
mqttClient.UseConnectedHandler(非同期e =>)
お問い合わせ
Console.WriteLine("MQTTブローカーと正常に接続)。
お問い合わせ
// MQTT ブローカーに接続する
mqttClient.ConnectAsync(options) を待ちます。

高度な機能

最終ウィル&テストの設定

設定する最終ウィルとテストクライアントが予期しないとブローカーが公開するメッセージを指定する機能 切断。 これは、接続されていないクライアントのステータスの他の加入者に通知するのに役立ちます。

接続オプションでLast Willを設定するには、次のコードを使用します。

var オプション = 新しい MqttClientOptionsBuilder()
. . withClientId(GenerateClientId("crystalmq_",10) )
. . © 2018 www.securehotelsreservations.com 著作権所有 アドレスとポート
. . withWillMessage(新しいMqttApplicationMessageBuilder())
.WithTopic("will/topic")
.WithPayload("Client1 は不意に接続されていない")
. . withQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce) は、
.WithRetainFlag(true)の
.ビルド())
.ビルド();

調節は生きている保ちます

MQTTの特長メンテナンス クライアントブローカーとの接続常に生き続けるメカニズム。 保護間隔を調整して、どのように制御するか 頻繁にクライアントは、PINGREQメッセージをブローカーに送信します。

あなたの要件に合ったコードを変更します。

var オプション = 新しい MqttClientOptionsBuilder()
. . withClientId(GenerateClientId("crystalmq_",10) )
. . © 2018 www.securehotelsreservations.com 著作権所有 ブローカーの住所および港
. . withWillMessage(新しいMqttApplicationMessageBuilder())
.WithTopic("will/topic")
.WithPayload("Client1 は不意に接続されていない")
. . withQualityOfServiceLevel(MqttQualityOfServiceLevel.AtLeastOnce) は、
.WithRetainFlag(true)の
.ビルド())
.ビルド();

セッションの持続性の設定

セッションデータMQTTの特長 クライアントクライアントと任意のデータによって行われたサブスクリプションを含む クライアントはQoS>0で受け取ります。 クライアントは、MQTTの特長 ブローカーセッションデータをコネクション間で保存します。

MQTT 3.1.1 クライアントは、MQTT ブローカーを要求するために、クリーン セッション = 0 を設定することができます セッション 接続間で保存された情報。

MQTT 3.1.1のため:

var オプション = 新しい MqttClientOptionsBuilder()
. . withClientId(GenerateClientId("crystalmq_"、10)) により
. . © 2018 www.securehotelsreservations.com 著作権所有 ブローカーの住所および港
.WithCleanSession(false) // セッションを維持するために、ClearSessionをfalseに設定する インフォメーション
. . withProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V311) // 使用 MQTT バージョン 3.1.1
.ビルド();

MQTTの特長 5 クライアントは、クリーンスタート = 0 とセッション有効期限インターバル = を設定することができます 'N' は、MQTT ブローカーをリクエストして、セッション情報を保存し続けます。 'N'秒間の接続

MQTT 5のため:

var セッション ExpiryInterval = 3600; // セッションの有効期限間隔を3600に設定する 秒(1時間)
var オプション = 新しい MqttClientOptionsBuilder()
. . withClientId(GenerateClientId("crystalmq_"、10)) により
. . © 2018 www.securehotelsreservations.com 著作権所有 ブローカーの住所および港
.WithCleanStart(false) // CleanStart を false に設定する
. . WithSessionExpiryInterval((uint)sessionExpiryInterval) // セッションを設定する 有効期限インターバル
. . withProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V500) // 使用 MQTT バージョン 5.0
.ビルド();

設定最大 パケット サイズ

MQTT5 クライアントは、MQTT ブローカーをリクエストして、データパケットを以下に送信することができます。 このような設定で特定のサイズ:

MQTT 5のため:

var maxPacketSize = 1024; // 例: 最大パケットサイズを1024に設定する ログイン
var オプション = 新しい MqttClientOptionsBuilder()
. . withClientId(GenerateClientId("crystalmq_"、10)) により
. . © 2018 www.securehotelsreservations.com 著作権所有 ブローカーの住所および港
. . withReceiveMaximum(maxPacketSize) // ディレクティブ ReceiveMaximum を設定してパケットを制限する サイズ:
. . withProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V500) // 使用 MQTT バージョン 5.0
.ビルド();

出版情報

データの送信

複数の加入者にデータを効率的に配信し、指定する 次のコードスニペットのトピック:

MQTT 3.1.1のため:

mqttClient.UseConnectedHandler(非同期e =>)
お問い合わせ
Console.WriteLine("MQTT Brokerで正常に接続)。 // // // // メッセージを公開する
var メッセージ = 新しい MqttApplicationMessageBuilder()
.WithTopic(「cmq/topic」)
.WithPayload (「こんにちはCrystalMQ」)
. . 通称OnceQoS()
.WithRetainFlag()の
.ビルド();
mqttClient.PublishAsync(メッセージ) を待ちます。
Console.WriteLine(「メッセージ公開」);
お問い合わせ

MQTT 5のため:

mqttClient.UseConnectedHandler(非同期e =>)
お問い合わせ
Console.WriteLine("MQTT Brokerで正常に接続)。
// メッセージを公開する
var メッセージ = 新しい MqttApplicationMessageBuilder()
.WithTopic(「cmq/topic」)
.WithPayload (「こんにちはCrystalMQ」)
. . withQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce) は、
.WithRetainFlag(true)の
.ビルド();
var result = mqttClient を待ちます。 PublishAsync(メッセージ)
Console.WriteLine($)メッセージが公開されました(結果: お問い合わせ
お問い合わせ

保持メッセージの設定

ブローカーが保管することを確認するためにメッセージを公開するときに保持フラグを有効にします 各トピックの最後のメッセージ。 これは、新しい加入者が最新のメッセージを受信することを保証 接続。

これを実行するには、次のコードスニペットを使用します。

var メッセージ = 新しい MqttApplicationMessageBuilder()
.WithTopic(「cmq/topic」)
.WithPayload (「こんにちはCrystalMQ」)
. . withQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce) は、
.WithRetainFlag(true) // 保持フラグを有効にする
.ビルド();

QoSレベルを指定する

MQTTは、メッセージ配信のための3つの品質(QoS)を提供します。

  • QoS 0 (一度に)
  • QoS 1 (少なくとも一度)
  • QoS 2 (一度だけ)

MQTT を公開する際に必要な QoS レベルを指定する このコードを使用してメッセージ:

// QoS 0 でメッセージを公開する
var messageQoS0 = 新しいMqttApplicationMessageBuilder()
.WithTopic(「cmq/topic」)
.WithPayload(「QoS 0:こんにちはCrystalMQ」)
. . withQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.AtMostOnce) の使い方
.WithRetainFlag(true) // 必要に応じてフラグを設定できます
.ビルド();
// QoS 1 でメッセージを公開する
var messageQoS1 = 新しいMqttApplicationMessageBuilder()
.WithTopic(「cmq/topic」)
.WithPayload(「QoS 1: Hello CrystalMQ」)
. . withQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.AtLeastOnceOnce) と
.WithRetainFlag(true) // 必要に応じてフラグを設定できます
.ビルド();
// QoS 2 でメッセージを公開する
var messageQoS2 = 新しいMqttApplicationMessageBuilder()
.WithTopic(「cmq/topic」)
.WithPayload(「QoS 2:こんにちはCrystalMQ」)
. . withQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce) は、
.WithRetainFlag(true) // 必要に応じてフラグを設定できます
.ビルド();

メッセージの有効期限インターバル

「メッセージの有効期限間隔」プロパティは、メッセージの寿命を秒単位に設定します。 現時点では、ブローカーはそれを破棄します。 MQTT5は、この機能をサポートしています。 MQTT5 クライアントは、データを公開する際にこれを設定できます。

MQTT 5のため:

var メッセージ = 新しい MqttApplicationMessageBuilder()
.WithTopic(「テスト/トピック」)
.WithPayload(「こんにちは、MQTT!」)
. . withMessageExpiryInterval(300秒) // 300秒 = 5分
.ビルド();

トピック 別名で

'Topic Alias' プロパティは、クライアントがフルの代わりに短いエイリアスを使用することを可能にします トピック名, メッセージパケットサイズを減らし、ネットワークの効率性を改善します。

MQTT 5のため:

var メッセージ = 新しい MqttApplicationMessageBuilder()
.WithTopic(「cmq/topic」)
.WithPayload (「こんにちは、CrystalMQ」)
.WithTopicAlias(1) // 'cmq/topic の別名で お問い合わせ
.ビルド();

MQTT PUBLISHに関連付けられたプロパティは、メッセージ処理を強化し、コンテキストを提供 ブローカーやクライアントの指示 これらのプロパティ, メッセージの余分間隔およびトピックのエイリアスを含んで、メッセージ配達を最大限に活用して下さい ネットワーク帯域幅。

会員登録

トピックフィルタへのサブスクライブ

他のクライアントが公開したデータを受信するには、このクライアントは マッチングトピックフィルタを購読する:

mqttClient.UseConnectedHandler(非同期e =>)
お問い合わせ
Console.WriteLine("MQTT Brokerで正常に接続)。
// トピックを購読する
mqttClient.SubscribeAsync(new) を待ちます。
MQTTnet.Client.Subscribing.MqttClientSubscribeOptionsBuilder()
.WithTopicFilter(f => f.WithTopic("cmq/topic")。Build());
Console.WriteLine("トピックにサブスクライブ));
お問い合わせ

このトピックフィルタは、正確なトピックと一致したり、 # のようなワイルドカードを持つことができます。 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + +

データの受信

サブスクリプションに送信されたデータを受信するには、コールバック関数を定義する必要があります このように:

mqttClient.UseApplicationメッセージ受信ハンドラ(e =>)
お問い合わせ
Console.WriteLine($)トピックに関するメッセージを受け取る
'{e.ApplicationMessage.Topic}':
{Encoding.UTF8.GetString(例:ApplicationMessage.Payload)}");
お問い合わせ

トピックからの購読解除

トピックから更新を受信を停止するには、提供されたコードを使用して退会します。

// トピックから退会する
mqttClient.UnsubscribeAsync("cmq/topic"); ;
Console.WriteLine("トピックから退会"););

クライアントの切断

ブローカーとのクライアントの接続の適切な終了を確実にする 双方の課題やリソース漏れを避け、システム安定性を維持します。

以下のコードを使用して、ブローカーからクライアントを切断します。

mqttClient.UseDisconnectedHandler(非同期e =>)
お問い合わせ
Console.WriteLine("MQTTブローカーから切断");
// // // // オプションで、ここで再接続ロジックを処理します
お問い合わせ
mqttClient.DisconnectAsync() を待ちます。

ビジネスロジックの構築

あなたは、あなた自身の複雑なビジネスロジックを開発し、カスタマイズする機会を持っています この環境の中で、 あなたの特定のニーズと目的に合わせて正確に調整します。

ベストプラクティスの実践

独自のクライアントID管理

特定のクライアント ID を各デバイスに適切に識別できるように割り当てます。 プライベート インスタンス, 独自のIDを個々のクライアントに割り当てます。 共有環境では、ランダムに添付 各クライアント ID に文字列を合わせ、一意性を確保します。

データ設計

事前にデータ構造を計画してください。 プレーンテキストや JSON 形式のデータや数字、適切なデータの効果的な設計を保証します。 アプリケーション/ユースケース/ニード。

強力なエラー処理

MQTT接続障害、サブスクリプションを処理する強力なエラー管理を実行 問題, エラーを効果的に公開するメッセージ。

機密保持

ユーザー名、パスワード、クライアント ID などの機密情報を保護する ソースコードをハードコーディングします。 代わりに環境変数を使うか、設定ファイルをセキュアにしておく。

定期的なテストと監視

MQTT通信を継続的にテストし、接続などのクライアントメトリックを監視 ステータス、メッセージのスループット、エラー率を迅速に特定し、問題を解決します。

セッションマネジメントの最適化

クリーンで永続的なセッション(`clean: true` または `clean: false`) から選択 クライアントの接続間でサブスクリプションとキューイングされたメッセージを保持する必要があります。

接続解除の解除

予期しない時にMQTTブローカーに再接続しようとするコードを追加 切断。 これは、クライアントが接続され、失わないことを確実にします あらゆるデータ。

コードをダウンロード

クライアントが使用する完全なコードをダウンロード . ネット MQTT クライアントライブラリは、ブローカーまたは選択したブローカーと接続します。

MQTT 3.1.1のため:

システムを使用して;
システム利用 コレクション ジェネリック
使用方法 System.Security.Cryptography.X509認証;
システム利用 テキスト;
システム利用 スレッド。 タスク;
MQTTnet の使用;
MQTTnet.Client の使用
授業プログラム
お問い合わせ
静的非同期タスクメイン(string[] args)
お問い合わせ
// ルート証明書をロードする
//var rootCert = new X509Certificate2("path_of_the_root_file") );
// MQTT クライアントオプションの設定
var オプション = 新しい MqttClientOptionsBuilder()
. . withClientId(GenerateClientId("crystalmq_",10) )
. . WithTcpServer("public-mqtt-broker.bevywise.com", 1883) // TLS変更を有効にする ポート 8883
//.WithWebSocketServer("ws://public-mqtt-broker.bevywise.com:10443/mqtt") // // // // WebSocket サーバー URI と TLS 変更ポート 11443 を有効にする
// .WithCredentials("username","password") // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // ユーザー名とパスワードの追加
// // // //
// .WithTls(新しいMqttClientOptionsBuilderTlsParameters)
お問い合わせ
// useTls = true,
// 証明書 = 新しいリストお問い合わせ
// 信頼できない証明書 = true, // 無効な証明書チェーン 検証
// 無視証明書 ChainErrors = true, // エラー 証明書チェーンを無視する エラー
// IgnoreCertificateRevocation エラー = true // 無視証明書 呼び出しエラー
お問い合わせ
.ビルド();
// MQTT クライアントを作成する
var 工場 = 新しい MqttFactory();
var mqttClient = factory.CreateMqttClient() ;
// クライアントイベントの処理
mqttClient.ConnectedAsync +=非同期e =>
お問い合わせ
Console.WriteLine("MQTT Brokerで正常に接続)。
// トピックを購読する
mqttClient.SubscribeAsync(new) を待ちます。 MqttClientSubscribeOptionsBuilder()。 トピックフィルタ(f =>) f.WithTopic("cmq/topic")。Build());;
Console.WriteLine("トピックにサブスクライブ));
// メッセージを公開する
var メッセージ = 新しい MqttApplicationMessageBuilder()
.WithTopic(「cmq/topic」)
.WithPayload (「こんにちはCrystalMQ」)
.ビルド();
mqttClient.PublishAsync(メッセージ) を待ちます。
Console.WriteLine(「メッセージ公開」);
お問い合わせ
mqttClient.DisconnectedAsync +=非同期e =>
お問い合わせ
Console.WriteLine(「MQTTブローカーから切断」)
タスクを待ちます。遅延(TimeSpan.FromSeconds(5));
お問い合わせ
お問い合わせ
mqttClient.ConnectAsync(options) を待ちます。
お問い合わせ
キャッチ
お問い合わせ
Console.WriteLine("Reconnecting失敗");
お問い合わせ
お問い合わせ
mqttClient.ApplicationMessageReceivedAsync += e =>
お問い合わせ Console.WriteLine($)受信メッセージ: {System.Text.Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
戻りタスク.完了 タスク;
お問い合わせ
// MQTT ブローカーに接続する
mqttClient.ConnectAsync(options) を待ちます。
// // // // アプリケーションの実行を維持
Console.WriteLine("Press キーを終了する");
コンソール.ReadLine();
プライベート静的文字列 GenerateClientId(文字列接頭辞、int長さ)
お問い合わせ
文字列 chars = 「ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789」;
var ランダム = new Random();
var ランダム チャーズ = 新しい文字[長さ];
(int i = 0; i <長さ; i++)
お問い合わせ
randomChars[i] = chars[random.Next(chars.length)];
お問い合わせ
プレフィックス+新しい文字列(randomChars)を返します。
お問い合わせ
お問い合わせ

MQTT 5のため:

システムを使用して;
システム利用 コレクション ジェネリック
使用方法 System.Security.Cryptography.X509認証;
システム利用 テキスト;
システム利用 スレッド。 タスク;
MQTTnet の使用;
MQTTnet.Client を使用して;
授業プログラム
お問い合わせ
静的非同期タスクメイン(string[] args)
お問い合わせ
var オプション = 新しい MqttClientOptionsBuilder()
. . withClientId(GenerateClientId("crystalmq_",10) )
. . © 2018 www.securehotelsreservations.com 著作権所有
//.WithWebSocketServer("ws://public-mqtt-broker.bevywise.com:10443/mqtt")
// .WithCredentials("username","password") // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // // ユーザー名とパスワードの追加
. . withProtocolVersion(MQTTnet.Formatter.MqttProtocolVersion.V500) //if mqttバージョンを使用する 5. 注意: TLS はバージョン 5 をサポートしていません。
.ビルド();
// MQTT クライアントを作成する
var 工場 = 新しい MqttFactory();
var mqttClient = factory.CreateMqttClient() ;
// クライアントイベントの処理
mqttClient.ConnectedAsync +=非同期e =>
お問い合わせ
Console.WriteLine("MQTT Brokerで正常に接続)。
// トピックを購読する
mqttClient.SubscribeAsync(new) を待ちます。 MqttClientSubscribeOptionsBuilder()。 トピックフィルタ(f =>) f.WithTopic("cmq/topic")。Build());;
Console.WriteLine("トピックにサブスクライブ));
// メッセージを公開する
var メッセージ = 新しい MqttApplicationMessageBuilder()
.WithTopic(「cmq/topic」)
.WithPayload (「こんにちはCMQ」)
. . withQualityOfServiceLevel(MQTTnet.Protocol.MqttQualityOfServiceLevel.ExactlyOnce) は、
.WithRetainFlag(true)の
.ビルド();
mqttClient.PublishAsync(メッセージ) を待ちます。
Console.WriteLine(「メッセージ公開」);
お問い合わせ
mqttClient.DisconnectedAsync +=非同期e =>
お問い合わせ Console.WriteLine(「MQTTブローカーから切断」)
タスクを待ちます。遅延(TimeSpan.FromSeconds(5));
お問い合わせ
お問い合わせ
mqttClient.ConnectAsync(options) を待ちます。
お問い合わせ
キャッチ
お問い合わせ
Console.WriteLine("Reconnecting失敗");
お問い合わせ
お問い合わせ
mqttClient.ApplicationMessageReceivedAsync += e =>
お問い合わせ
Console.WriteLine($)受信メッセージ: {System.Text.Encoding.UTF8.GetString(e.ApplicationMessage.Payload)}");
戻りタスク.完了 タスク;
お問い合わせ
// MQTT ブローカーに接続する
mqttClient.ConnectAsync(options) を待ちます。
// // // // アプリケーションの実行を維持
Console.WriteLine("Press キーを終了する");
コンソール.ReadLine();
プライベート静的文字列 GenerateClientId(文字列接頭辞、int長さ)
お問い合わせ
文字列 chars = 「ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789」;
var ランダム = new Random();
var ランダム チャーズ = 新しい文字[長さ];
(int i = 0; i <長さ; i++)
お問い合わせ
randomChars[i] = chars[random.Next(chars.length)];
お問い合わせ
プレフィックス+新しい文字列(randomChars)を返します。
お問い合わせ
お問い合わせ

実行可能なバンドルを作成する

ここでは、このCクライアントが実行可能にgccコンパイラを使用してコンパイルできる方法を示します。

.Net SDK の使用:

プログラムをコンパイルして実行するには、次のコマンドを使用します。

dotnet 実行

このコマンドはアプリケーションをビルドして実行し、出力が表示されるはずです。 ターミナル。

プロジェクトのビルド(オプション):

実行せずにプロジェクトをコンパイルしたい場合は、次のようにします。

dotnetビルド

コンパイルされたバイナリは、プロジェクトフォルダ内の bin ディレクトリにあります。

Visual Studio の使用:

1。 プログラムのコンパイルと実行:

  • 「スタート」ボタン(緑色の再生ボタン)をクリックするか、F5を押してビルドして実行します アプリケーション。
  • 出力は「出力」ウィンドウまたはコンソールウィンドウに表示されます。 オープニング
2。 プロジェクトのビルド(オプション):
  • 実行せずにプロジェクトをビルドするには、「ビルド」メニューに移動し、「ビルド」を選択します。 ソリューション" または Ctrl+Shift+B を押します。
  • コンパイルされたバイナリは、プロジェクト内の bin ディレクトリにあります。 フォルダ。

クライアントを最先端のアートに接続当社のブローカー(クリスタルMQ) またはあなたの選択のブローカー。 この強力な組み合わせ すべてのメッセージングのニーズに最適なパフォーマンスと信頼性を保証します。 堅牢で効率的なシステム統合のための方法を舗装します。