linuxの下でC言語を使ってMQTT通信を実現する(三丶経験を総括する)
9354 ワード
MQTTをする时に多くの困难に出会って、无からあるまで、同じく多くの収获を得て、以下は私が本プロジェクトをする心得を総括します;一丶yEd Graph Editorソフトウェアを使用して図面を作成することをマスターしました.(醜いですが!)、以前はプログラムを書くときは頭を悩ませて書いていましたが、フローチャートを描かないで、バグが発生して解決できないし、どこから変更するか分からないので、今ではフローチャートを描くことをマスターしてコードを書くのが楽になりました.このソフトウェアのダウンロード先:https://www.yworks.com/products/yed
二丶MQTTに関する多くの関数を学び、以下にこれらの関数を紹介する:1丶MQTTClient_message:クライアントの情報関数.
2丶MQTTClient_create:MQTTクライアント関数の作成
3丶MQTTClient_setCallbacks:この関数は特定のクライアントにコールバック関数を作成する
4丶MQTTClient_connect:先に作成したクライアントをMQTTサーバに接続します.
5丶DLExport int MQTTClient_subscribe:ワイルドカードを含む単一のトピックに顧客を購読しようとします.この関数では、サービス品質も指定します.
6丶MQTTClient_publishMessage:ワイルドカードを含む1つのトピックに顧客を購読してみます.この関数では、サービス品質も指定します.
7丶MQTTClient_waitForCompletion:クライアント・アプリケーションは、この関数を呼び出して、プライマリ・スレッドの実行をメッセージの完了パブリケーションと同期させる.呼び出されると、MQTTClient_waitForCompletion()は、メッセージが正常に転送されるか、または指定された時間を超えるまで実行をブロックする.
8丶MQTTClient_receive:受信関数.
二丶MQTTに関する多くの関数を学び、以下にこれらの関数を紹介する:1丶MQTTClient_message:クライアントの情報関数.
typedef struct
{
char struct_id[4];// , MQTM
int struct_version;// , 0
int payloadlen;//MQTT
void* payload;//
int qos;//
int retained;//
int dup;dup// 。 QoS1 。 true, 。
int msgid;// MQTT 。
} MQTTClient_message;
2丶MQTTClient_create:MQTTクライアント関数の作成
DLLExport int MQTTClient_create(
MQTTClient * handle,// MQTT 。
const char * serverURI,// , 。
const char * clientId,// (clientId) UTF-8 , 。
int persistence_type,// 。
void * persistence_context// MQTTCLIENT_PERSISTENCE_NONE , , NULL。 MQTTCLIENT_PERSISTENCE_DEFAULT , ( NULL, )。 MQTTCLIENT_PERSISTENCE_USER , MQTTClient_persistence 。
)
3丶MQTTClient_setCallbacks:この関数は特定のクライアントにコールバック関数を作成する
DLLExport int MQTTClient_setCallbacks (
MQTTClient handle,// MQTT 。
void * context,// 。 , 。
MQTTClient_connectionLost * cl,// MQTTClient_connectionLost() 。 , NULL。
MQTTClient_messageArrived * ma,// MQTTClient_messageArrived() 。 MQTTClient_setCallbacks() , 。
MQTTClient_deliveryComplete * dc // MQTTClient_deliveryComplete() 。 , , NULL。
)
4丶MQTTClient_connect:先に作成したクライアントをMQTTサーバに接続します.
DLLExport int MQTTClient_connect (
MQTTClient handle,// MQTT 。
MQTTClient_connectOptions * options //options MQTTClient_connectOptions 。
>
0
1 : 。
2 : 。
3 : 。
4 : 。
5 : 。
6 。
)
5丶DLExport int MQTTClient_subscribe:ワイルドカードを含む単一のトピックに顧客を購読しようとします.この関数では、サービス品質も指定します.
DLLExport int MQTTClient_subscribe (
MQTTClient handle,// MQTT 。
const char * topic,// ,
int qos //
)
6丶MQTTClient_publishMessage:ワイルドカードを含む1つのトピックに顧客を購読してみます.この関数では、サービス品質も指定します.
DLLExport int MQTTClient_publishMessage (
MQTTClient handle,// MQTT 。
const char * topicName,// 。
MQTTClient_message * msg,// MQTTClient_message ,
MQTTClient_deliveryToken * dt // MQTTClient_deliveryToken 。 ,dt token。 token, NULL。
)
7丶MQTTClient_waitForCompletion:クライアント・アプリケーションは、この関数を呼び出して、プライマリ・スレッドの実行をメッセージの完了パブリケーションと同期させる.呼び出されると、MQTTClient_waitForCompletion()は、メッセージが正常に転送されるか、または指定された時間を超えるまで実行をブロックする.
DLLExport int MQTTClient_waitForCompletion (
MQTTClient handle,// MQTT 。
MQTTClient_deliveryToken dt,// MQTTClient_deliveryToken 。 token MQTTClient_publish () MQTTClient_publishMessage () 。
unsigned long timeout //
)
8丶MQTTClient_receive:受信関数.
int MQTTClient_receive(
MQTTClient handle,// MQTTClient_create
char** topicName,// 。 topicName 。
int* topicLen, // 。
MQTTClient_message** message,// message
unsigned long timeout)