linuxの下でC言語を使ってMQTT通信を実現する(三丶経験を総括する)

9354 ワード

MQTTをする时に多くの困难に出会って、无からあるまで、同じく多くの収获を得て、以下は私が本プロジェクトをする心得を総括します;一丶yEd Graph Editorソフトウェアを使用して図面を作成することをマスターしました.(醜いですが!)、以前はプログラムを書くときは頭を悩ませて書いていましたが、フローチャートを描かないで、バグが発生して解決できないし、どこから変更するか分からないので、今ではフローチャートを描くことをマスターしてコードを書くのが楽になりました.このソフトウェアのダウンロード先:https://www.yworks.com/products/yed
二丶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)