このドキュメントは、接続を介してあなたを導くMQTTクライアントお問い合わせMQTTブローカー(CrystalMQ) またはブローカー あなたの選択を使用してEclipseパホ ライブラリは、デバイス間の効率的な通信を可能にします。
Eclipse Paho 組み込み Cはデスクトップのオペレーティング システムのために適していますが、主にあります mbed、ArduinoおよびFreeRTOSのような埋め込まれた環境のために設計されている。
MQTT クライアントを MQTT ブローカーに接続する前に、 以下の前提条件を満たしています。
Eclipseパホ MQTT Cライブラリ
このライブラリはクライアントコードに以下のように含まれている必要があります。
#include "MQTTAsync.h" を使う
このライブラリはソースからビルドできます。
Linux/macOSの
git クローン https://github.com/eclipse/paho.mqtt.c.git
cd paho.mqtt.c
メイク
sudo make インストール
ウィンドウズ
mkdirビルド。 パフォ
cdビルド。 パフォ
"C:\Program Files (x86)\Microsoft Visual Studio を呼び出す
14.0\VC\vcvarsall.batのx64
cmake -G "NMake Makefiles" -DPAHO_WITH_SSL=TRUE" の使い方
-DPAHO_BUILD_DOCUMENTATION=偽物 -DPAHO_BUILD_SAMPLES=TRUE
-DCMAKE_BUILD_TYPE=リリース -DCMAKE_VERBOSE_MAKEFILE=TRUE .
メニュー
このセクションには、MQTT に接続するさまざまな方法のコードスニペットがあります ブローカー。 MQTT ブローカーが使用する接続タイプをサポートしていることを確認してください。 また、MQTTブローカー(アドレス、ポート、)の対応する接続パラメータを取得 ユーザー名/パスワード、CA証明書
MQTTの特長 TCP で
クライアントを TCP に接続するために、次のコードを使用します。 MQTT Brokerの接続パラメータを使用してマクロADDRESSを定義します。
#define ADDRESS "tcp://public-mqtt-broker.bevywise.com:1883"
#define CLIENTID "crystamq_testclient"
MQTTAsyncクライアント;
MQTTAsync_create(&client、ADDRESS、CLIENTID、MQTTCLIENT_PERSISTENCE_NONE、
NULL;
MQTTAsync_connectOptions conn_opts =
MQTTAsync_connectOptions_initializer;
int の rc;
if ((rc = MQTTAsync_connect(client, &conn_opts))) != MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf("Connect, return code %d\n", rc" を起動できません)
出口(EXIT_FAILURE);
お問い合わせ
/ クライアントの作成
MQTTAsyncクライアント;
MQTTAsync_createOptions create_opts =
MQTTAsync_createOptions_initializer;
create_opts.MQTTVersion = MQTTVERSION_5;
int rc = MQTTAsync_createWithOptions(&client, ADDRESS, CLIENTID),
MQTTCLIENT_PERSISTENCE_NONE, NULL, &create_opts; は、
もし(rc !=) MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
fprintf(stderr, "クライアントを作成する失敗, 戻りコード: %s\n",
MQTTAsync_strerror(rc) ;
出口(EXIT_FAILURE);
お問い合わせ
// クライアントを接続する
MQTTAsync_connectOptions conn_opts =
MQTTAsync_connectOptions_initializer5;
if ((rc = MQTTAsync_connect(client, &conn_opts))) != MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf("Connect, return code %d\n", rc" を起動できません)
出口(EXIT_FAILURE);
お問い合わせ
TLS/SSL上のMQTT
以下のコードを使用して、TLS 上で MQTT ブローカーに安全に接続します。 MQTT Brokerの接続パラメータを使用してマクロADDRESSを定義します。
#define アドレス
"ssl://freemqttbroker.sfodo.mqttserver.com:8883"
MQTTClient_connect を呼び出す前に TLS パラメータを設定する クライアントを TLS 上で安全に mQTT ブローカーに接続します。
MQTTブローカーが信頼できるサーバーとサーバーでホストされている場合 認証は必要ありません。以下のコードは TLS オプションを設定するために使用できます。
MQTTAsync_SSLOptions ssl_opts = MQTTAsync_SSLOptions_initializer;
ssl_opts.verify = 0;ssl_opts.slVersion = MQTT_SSL_VERSION_TLS_1_2;
ssl_opts.enableServerCertAuth = 0;
ssl_opts.verify = 0;
conn_opts.sl = &ssl_opts;
MQTT ブローカーが Trusted から発行された Server 証明書を持っている場合 CA は、サーバー 証明書を使用して確認することができます。
MQTTAsync_SSLOptions ssl_opts = MQTTAsync_SSLOptions_initializer;
ssl_opts.verify = 0;ssl_opts.slVersion = MQTT_SSL_VERSION_TLS_1_2;
ssl_opts.enableServerCertAuth = 1 ;
ssl_opts.verify = 1 ;
conn_opts.sl = &ssl_opts;
MQTTブローカーに自己署名されたサーバー証明書がある場合 サーバー証明書は、MQTTから入手したルート証明書を使用して検証することができます ブローカー:
MQTTAsync_SSLOptions ssl_opts = MQTTAsync_SSLOptions_initializer;
ssl_opts.verify = 0;ssl_opts.slVersion = MQTT_SSL_VERSION_TLS_1_2;
ssl_opts.enableServerCertAuth = 1 ;
ssl_opts.verify = 1 ;
ssl_opts.CApath = "./root.crt";
conn_opts.sl = &ssl_opts;
WebSocket 経由で MQTT
このようなMQTTブローカーアドレスを定義して、クライアントを経由して接続します ウェブソケット。
#define アドレス
"ws://freemqttbroker.sfodo.mqttserver.com:10443" "
セキュアなWebSocket上MQTT
Secure WebSocket 上でクライアントを接続するには、以下のコードを使用します。 TLS オプションを TLS セクションに MQTT で指定するように設定します。 MQTT Brokerの接続パラメータを使用してマクロADDRESSを定義します。
#define ADDRESS "wss://public-mqtt-broker.bevywise.com:11443"
MQTT の設定 認証
MQTT ユーザー名と MQTT を必要とする MQTT ブローカーに接続するには 認証用のパスワード、ユーザー名、パスワードなどの接続オプションに追加 これ:
MQTTAsync_create(&client、ADDRESS、CLIENTID、MQTTCLIENT_PERSISTENCE_NONE、
NULL;
conn_opts.username = "your-mqtt-username";
conn_opts.password = "your-mqtt-password";
高度な機能
最終ウィル&テストの設定
設定する最終ウィルとテスト機能を指定する ブローカーは、クライアントが予期しない接続を解除した場合、ブローカーが公開されるメッセージ。 お問い合わせ 接続されていないクライアントのステータスの他の加入者に通知するのに役立ちます。
接続にLast Willを設定するには、次のコードを使用します。 オプション:
MQTTAsync_willOptions will_opts = MQTTAsync_willOptions_initializer;
will_opts.topicName = "MQTT/Will"; //これを変更すると、トピックが表示される
お問い合わせ
will_opts.qos = 0; // 選択したQoSにこれを変更する
will_opts.message = "途方もなく接続解除";
conn_opts.will = &will_opts;
調節は生きている保ちます
調整する常に生き続ける頻度を制御する間隔 クライアントは、PINGREQメッセージをブローカーに送信します。
あなたの要件に合ったコードを変更します。
MQTTAsync_create(&client、ADDRESS、CLIENTID)、
MQTTCLIENT_PERSISTENCE_NONE, NULL は、
conn_opts.keepAliveInterval = 20;
セッションの持続性の設定
MQTTクライアントのセッションデータにはサブスクリプションが含まれます クライアントとクライアントがQoS>0で受け取るデータによって作られる。 クライアントは、MQTTの特長 ブローカーセッションデータをコネクション間で保存します。
MQTT 3.1.1の顧客はMQTTを要求するためにきれいなセッション= 0を置くことができます ブローカーは、セッション情報をコネクション間で保存しておく。
conn_opts.cleansession = 0 ;
MQTTの特長 5 クライアントは、クリーンスタート = 0 とセッションの有効期限を設定できます Interval = 'N' が MQTT ブローカーに要求され、セッション情報を保持する 'N' 秒間の接続
MQTTAsync_connectOptions conn_opts =
MQTTAsync_connectOptions_initializer5;
conn_opts.cleanstart = 1 ;
MQTTProperties props = MQTTProperties_initializer;
MQTTプロパティ1
;;;
プロパティ1.identifier = MQTTPROPERTY_CODE_SESSION_EXPIRY_INTERVAL;
プロパティ1.value.integer2 = 90;
MQTTProperties_add(&props、&property1);
設定最大 パケット サイズ
MQTT5 クライアントは、MQTT ブローカーにデータを送信するだけを要求することができます このように設定することで、特定のサイズ未満のパケット:
MQTTPropertyプロパティ2;
プロパティ2.identifier = MQTTPROPERTY_CODE_MAXIMUM_PACKET_SIZE;
プロパティ2.value.integer4 = 4094;
MQTTProperties_add(&props、&property2);
データの送信
複数の加入者にデータを効率的に配信し、指定する 次のコードスニペットのトピック:
#define TOPIC "デバイス/ステータス"
#define PAYLOAD "ON" は、
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
int の rc;
pubmsg.ペイロード = PAYLOAD;
pubmsg.payloadlen = strlen(PAYLOAD);
パブmsg.qos = 1;
pubmsg.retained = 0;
渡された = 0;
もし(rc = MQTTAsync_sendMessage(client, TOPIC, &pubmsg, &opts)) !=
MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf(" sendMessage を開始できなかった, 戻りコード %d\n", rc);
出口(EXIT_FAILURE);
お問い合わせ
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
pubmsg.ペイロード = PAYLOAD;
pubmsg.payloadlen = strlen(PAYLOAD);
pubmsg.qos = QOS;
pubmsg.retained = 0;
もし(rc = MQTTAsync_sendMessage(client, TOPIC, &pubmsg, &pub_opts)) !=
MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf(" sendMessage を開始できなかった, 戻りコード %d\n", rc);
出口(EXIT_FAILURE);
お問い合わせ
保持メッセージの設定
メッセージの公開時に保持フラグを有効にして、 ブローカーは、各トピックの最後のメッセージを格納します。 これは、新しい加入者を保証する 接続時に最新のメッセージを受信します。
これを実行するには、次のコードスニペットを使用します。
パブmsg.retained = 1
QoSレベルを指定する
MQTTは、メッセージの3つの品質(QoS)を提供します 配達:
MQTT メッセージを公開する際に必要な QoS レベルを指定します。 このコード:
pubmsg.qos = 1; // 0 または 1 または 2 に設定
メッセージの有効期限インターバル
「メッセージの有効期限間隔」プロパティは、メッセージの寿命を設定します 秒; この時間内に配信されていない場合、ブローカーはそれを破棄します。 MQTT5は、この機能をサポートしています。 MQTT5 クライアントは、データを公開する際にこれを設定できます。
MQTTAsync_responseOptions pub_opts =
MQTTAsync_responseOptions_initializer;
pub_opts.context = クライアント;
MQTTProperties pub_props = MQTTProperties_initializer;
MQTTPropertyプロパティ3;
プロパティ3.identifier = MQTTPROPERTY_CODE_MESSAGE_EXPIRY_INTERVAL;
プロパティ3.value.integer4 = 90;
MQTTProperties_add(&pub_props、&property3)。
pub_opts.properties = pub_props;
トピック 別名で
'Topic Alias' プロパティは、クライアントが短いエイリアスを使用することを可能にします トピック名の代わりに、メッセージパケットサイズを減らし、ネットワークを改善 効率。
MQTTAsync_responseOptions pub_opts =
MQTTAsync_responseOptions_initializer;
pub_opts.context = クライアント;
MQTTProperties pub_props = MQTTProperties_initializer;
MQTTPropertyプロパティ3;
プロパティ3.identifier = MQTTPROPERTY_CODE_TOPIC_ALIAS;
プロパティ3.value.integer2 = 10;
MQTTProperties_add(&pub_props、&property3)。
pub_opts.properties = pub_props;
MQTT PUBLISHに関連付けられている特性はメッセージの処理を高めます、 ブローカーやクライアントのコンテキストや指示を提供します。 これらのプロパティ, 含む メッセージの有効期限間隔とトピックのエイリアス、メッセージ配信とネットワークの最適化 帯域幅。
トピックフィルタへのサブスクライブ
他のクライアントが公開したデータを受信するには、このクライアントは マッチングトピックフィルタを購読する:
#define フィルター "your-topic-filter"
#QOSの定義 1
if ((rc = MQTTAsync_subscribe(client、FILTER、QOS、NULL))) !=
MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf("サブスクリプションに失敗し、コードを%d\n、rcを返す);
出口(EXIT_FAILURE);
お問い合わせ
このトピックフィルタは、正確なトピックと一致させることができます。 # や + のようなワイルドカード
データの受信
サブスクリプションに送信されたデータを受信するには、コールバック関数 次のように定義する必要があります。
/*このクライアントがメッセージを受信したときにコールバックがトリガーされます*/
int msgarrvd(void *context、char *topicName、int トピック)
MQTTClient_message *メッセージ
お問い合わせ
サインイン
char*のペイロードプター;
printf("メッセージは到着しました\n");
printf(" トピック: %s\n", トピック名);
printf(") メッセージ: ");
payloadptr = メッセージ->ペイロード;
(i=0 の場合)
お問い合わせ
putchar(*ペイロードプラー++);
お問い合わせ
パチャー('\n');
MQTTClient_freeMessage(&メッセージ)。
MQTTClient_free (トピック名);
リターン1;
お問い合わせ
MQTTClient_setCallbacks(クライアント、NULL、NULL、msgarrvd、NULL);
トピックからの購読解除
トピックから更新を受信を停止するには、提供されたコードを使用します 購読解除
#define フィルター "your-topic-filter"
if ((rc = MQTTAsync_unsubscribe(client, FILTER, NULL)) !=
MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf("unsubscribe, 戻りコード%d\n", rc);
お問い合わせ
クライアントの接続を適切に終了させる 双方の問題および資源の漏出を避けるブローカー、それによって維持システム 安定性。
以下のコードを使用して、ブローカーからクライアントを切断します。
MQTTAsync_disconnect(クライアント、NULL);
MQTTAsync_destroy(&client) ディレクティブ
自分で開発してカスタマイズする機会があります この環境内でビジネスロジックを複雑にし、具体的に具体的に ニーズと目的。
クライアントIDの割り当て
特定のクライアント ID をすべてのデバイスに割り当て、正確な識別を維持します。 インスタグラム プライベートインスタンス、個々のクライアントに一意のIDを割り当てます。 共有環境では、各クライアント ID にランダムな文字列を割り当て、一意性 保証。
データの設計
データ構造を慎重に計画して整理します。 プレーンテキストを管理するかどうか、JSON フォーマット, または数値データ、設計が特定の条件に適するためにカスタマイズされていることを保障して下さい アプリケーション。
強力なエラー処理
MQTT接続障害、サブスクリプションを処理する強力なエラー管理を実行 問題とメッセージの公開エラーが効果的に.
機密保持
ユーザー名、パスワードなどの機密情報を保護 ソースコードにハードコーディングしないクライアントID。 環境変数または 代わりに設定ファイルを固定します。
定期的なテストと監視
MQTT通信を継続的にテストし、クライアントのメトリックを監視 接続状況、メッセージスループット、エラーレートなど、迅速に識別および修正 問題。
セッションマネジメントの最適化
クリーンで永続的なセッション(`clean: true` または `clean: false`) は、サブスクリプションとキューイングされたメッセージを全体に保持する必要がある クライアントの接続。
接続解除の解除
接続解除の解除 予期しない時にMQTTブローカーに再接続しようとするコードを追加 切断。 これは、クライアントが接続を維持し、失わないことを確実にします データ。
Paho C MQTT クライアントを使用するクライアントのための完全なコードをダウンロード 私たちのメッセージングブローカーまたはあなたの選択のブローカーに接続するライブラリ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include "MQTTAsync.h" を使う
#define ADDRESS "tcp://localhost:1883"
#define TOPIC "センサー/温度"
#define PAYLOAD "180"
#QOSの定義 1
#define タイムアウト 10000L
終了 = 0;
void create_clientid(char *str, int str_length) を生成します。
お問い合わせ
srand (時間(NULL));
コント文字 *英数字 =
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", *PREFIX =
"crystalmq_";
strncpy(str, PREFIX, strlen(PREFIX));
用 (int i = 0; i < (str_length-strlen(PREFIX))); . . .
str[10 + i] = alphanum[rand() % 62]; // 62 は alphanum の長さ
キーワード
お問い合わせ
str[str_length] = '\0';
お問い合わせ
onDisconnect(void*文脈) を無効化します。 MQTTAsync_successData* 応答
お問い合わせ
printf("Successful disconnection\n"); ;
終了 = 1;
お問い合わせ
onSubscribe(void*文脈) を省略します。 MQTTAsync_successData* 応答
お問い合わせ
printf("Subscribe は成功しました\n");
お問い合わせ
onConnectFailure(void* コンテキスト) を無効にします。 MQTTAsync_failureData* 応答
お問い合わせ
printf("Connect が失敗しました, rc %d\n", response ? 応答->code : 0);
終了 = 1;
お問い合わせ
void onConnect(void* コンテキスト) MQTTAsync_successData* 応答
お問い合わせ
printf("成功関係\n");
お問い合わせ
int msgarrvd(void *context、char *topicName、int トピックレン、MQTTAsync_message
*メッセージ
お問い合わせ
サインイン
char*のペイロードプター;
printf("メッセージは到着しました\n");
printf(" トピック: %s\n", トピック名);
printf(") メッセージ: ");
payloadptr = メッセージ->ペイロード;
(i=0 の場合)
お問い合わせ
putchar(*ペイロードプラー++);
お問い合わせ
パチャー('\n');
MQTTAsync_freeMessage(&メッセージ)。
MQTTAsync_free(トピック名);
リターン1;
お問い合わせ
int main(int argc, char* argv[)]) の
お問い合わせ
// クライアントを作成する
char clientid[21];
生成_clientid(clientid、20);
MQTTAsyncクライアント;
MQTTAsync_create(&client, ADDRESS, Clientid, MQTTCLIENT_PERSISTENCE_NONE, MQTTAsync_create(&client, ADDRESS, Clientid, MQTTCLIENT_PERSISTENCE_NONE, MQTTAsync_create(&client, ADDRESS, Clientid), MQTTAsync_create(&client), MQTTAsync_create(&client, ADDRESS, Clientid), MQTTCLIENT_PERSISTENCE_NONE,
NULL;
MQTTAsync_setCallbacks(クライアント、NULL、NULL、msgarrvd、NULL);
MQTTAsync_connectOptions conn_opts =
MQTTAsync_connectOptions_initializer;
conn_opts.keepAliveインターバル = 60;
conn_opts.cleansession = 1 ;
conn_opts.on成功 = onConnect;
サインイン 失敗 = onConnectFailure;
conn_opts.context = クライアント;
int の rc;
if ((rc = MQTTAsync_connect(client, &conn_opts))) != MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf("Connect, return code %d\n", rc" を起動できません)
出口(EXIT_FAILURE);
お問い合わせ
睡眠(1);
// 購読する
MQTTAsync_responseOptions サブ_opts =
MQTTAsync_responseOptions_initializer;
sub_opts.on成功 = onSubscribe;
sub_opts.context = クライアント;
if ((rc = MQTTAsync_subscribe(client, TOPIC, QOS, ◀_opts))) !=
MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf("サブスクリプションに失敗し、コードを%d\n、rcを返す);
出口(EXIT_FAILURE);
お問い合わせ
// 公開
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
pubmsg.ペイロード = PAYLOAD;
pubmsg.payloadlen = strlen(PAYLOAD);
pubmsg.qos = QOS;
pubmsg.retained = 0;
if ((rc = MQTTAsync_sendMessage(client, TOPIC, &pubmsg, NULL))) !=
MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf(" sendMessage を開始できなかった, 戻りコード %d\n", rc);
出口(EXIT_FAILURE);
お問い合わせ
しばらく(!終了)
#if 定義(WIN32) | 定義(WIN64)
睡眠(100);
ログイン
usleep(10000L);
パスワード
MQTTAsync_destroy(&client) ディレクティブ
リターン rc;
お問い合わせ
#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#include <time.h>
#include <unistd.h>
#include "MQTTAsync.h" を使う
#define ADDRESS "tcp://localhost:1883"
#define TOPIC "センサー/湿気"
#define PAYLOAD "20.3"
#QOSの定義 1
#define タイムアウト 10000L
終了 = 0;
void create_clientid(char *str, int str_length) を生成します。
お問い合わせ
srand (時間(NULL));
コント文字 *英数字 =
"0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz", *PREFIX =
"crystalmq_";
strncpy(str, PREFIX, strlen(PREFIX));
用 (int i = 0; i < (str_length-strlen(PREFIX))); . . .
str[10 + i] = alphanum[rand() % 62]; // 62 は alphanum の長さ
キーワード
お問い合わせ
str[str_length] = '\0';
お問い合わせ
onDisconnect(void*文脈) を無効化します。 MQTTAsync_successData* 応答
お問い合わせ
printf("Successful disconnection\n"); ;
終了 = 1;
お問い合わせ
onConnectFailure(void* コンテキスト) を無効にします。 MQTTAsync_failureData* 応答
お問い合わせ
printf("Connect が失敗しました, rc %d\n", response ? 応答->code : 0);
終了 = 1;
お問い合わせ
void onConnect(void* コンテキスト) MQTTAsync_successData* 応答
お問い合わせ
printf("成功関係\n");
お問い合わせ
int msgarrvd(void *context、char *topicName、int トピックレン、MQTTAsync_message
*メッセージ
お問い合わせ
サインイン
char*のペイロードプター;
printf("メッセージは到着しました\n");
printf(" トピック: %s\n", トピック名);
printf(") メッセージ: ");
payloadptr = メッセージ->ペイロード;
(i=0 の場合)
お問い合わせ
putchar(*ペイロードプラー++);
お問い合わせ
パチャー('\n');
MQTTAsync_freeMessage(&メッセージ)。
MQTTAsync_free(トピック名);
リターン1;
お問い合わせ
int main(int argc, char* argv[)]) の
お問い合わせ
// クライアントを作成する
char clientid[21];
生成_clientid(clientid、20);
MQTTAsyncクライアント;
MQTTAsync_createOptions create_opts =
MQTTAsync_createOptions_initializer;
create_opts.MQTTVersion = MQTTVERSION_5;
int rc = MQTTAsync_createWithOptions(&client, ADDRESS, clientid, クライアント,
MQTTCLIENT_PERSISTENCE_NONE, NULL, &create_opts; は、
MQTTAsync_setCallbacks(クライアント、NULL、NULL、msgarrvd、NULL);
// CONNECT の設定 プロパティ
MQTTAsync_connectOptions conn_opts =
MQTTAsync_connectOptions_initializer5;
conn_opts.keepAliveInterval = 20;
conn_opts.cleanstart = 1 ;
conn_opts.on成功 = onConnect;
サインイン 失敗 = onConnectFailure;
conn_opts.context = クライアント;
MQTTProperties props = MQTTProperties_initializer;
// // セッションの有効期限インターバル
MQTTプロパティ1;
プロパティ1.identifier = MQTTPROPERTY_CODE_SESSION_EXPIRY_INTERVAL;
プロパティ1.value.integer2 = 90;
MQTTProperties_add(&props、&property1);
// // 最大パケットサイズ
MQTTPropertyプロパティ2;
プロパティ2.identifier = MQTTPROPERTY_CODE_MAXIMUM_PACKET_SIZE;
プロパティ2.value.integer4 = 4094;
MQTTProperties_add(&props、&property2);
conn_opts.connectプロパティ = &props
if ((rc = MQTTAsync_connect(client, &conn_opts))) != MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf("Connect, return code %d\n", rc" を起動できません)
出口(EXIT_FAILURE);
お問い合わせ
睡眠(1);
// 購読する
もし(rc = MQTTAsync_subscribe(client, TOPIC, QOS, NULL)) !=
MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf("サブスクリプションに失敗し、コードを%d\n、rcを返す);
出口(EXIT_FAILURE);
お問い合わせ
睡眠(1);
// 公開
MQTTAsync_message pubmsg = MQTTAsync_message_initializer;
pubmsg.ペイロード = PAYLOAD;
pubmsg.payloadlen = strlen(PAYLOAD);
pubmsg.qos = QOS;
pubmsg.retained = 0;
// 公開プロパティを設定する
MQTTAsync_responseOptions pub_opts =
MQTTAsync_responseOptions_initializer;
pub_opts.context = クライアント;
MQTTProperties pub_props = MQTTProperties_initializer;
MQTTPropertyプロパティ3;
プロパティ3.identifier = MQTTPROPERTY_CODE_TOPIC_ALIAS;
プロパティ3.value.integer4 = 90;
MQTTProperties_add(&pub_props、&property3)。
pub_opts.properties = pub_props;
もし(rc = MQTTAsync_sendMessage(client, TOPIC, &pubmsg, &pub_opts)) !=
MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf(" sendMessage を開始できなかった, 戻りコード %d\n", rc);
出口(EXIT_FAILURE);
お問い合わせ
睡眠(1);
もし(rc = MQTTAsync_unsubscribe(client, TOPIC, NULL)) !=
MQTTASYNC_SUCCESS(マクタスイック)
お問い合わせ
printf("unsubscribe, 戻りコード%d\n", rc);
出口(EXIT_FAILURE);
お問い合わせ
しばらく(!終了)
#if 定義(WIN32) | 定義(WIN64)
睡眠(100);
ログイン
usleep(10000L);
パスワード
MQTTAsync_destroy(&client) ディレクティブ
リターン rc;
お問い合わせ
ここでは、このCクライアントがgccコンパイラを使ってコンパイルする方法を 実行可能。
$ gcc -o mqttclient mqttclient.c -lpaho-mqtt3a -lpaho-mqtt3as
$ ./mqttclient
クライアントを最先端のアートに接続MQTTブローカーまたはあなたの選択のブローカー。 この強力な組み合わせにより、最適な性能と信頼性が保証されます。 メッセージングのニーズ、堅牢で効率的なシステム統合のための方法を残す