• Linux c++ 试验-2 mosquitto.so库使用


    1、代码

    #include <stdio.h>
    #include <mosquitto.h>
    
    void my_message_callback(struct mosquitto *mosq, void *userdata, const struct mosquitto_message *message)
    {
    	if(message->payloadlen){
    		printf("%s %s
    ", message->topic, message->payload);
    	}else{
    		printf("%s (null)
    ", message->topic);
    	}
    	fflush(stdout);
    }
    
    void my_connect_callback(struct mosquitto *mosq, void *userdata, int result)
    {
    	int i;
    	if(!result){
    		/* Subscribe to broker information topics on successful connect. */
    		mosquitto_subscribe(mosq, NULL, "$SYS/#", 2);
    	}else{
    		fprintf(stderr, "Connect failed
    ");
    	}
    }
    
    void my_subscribe_callback(struct mosquitto *mosq, void *userdata, int mid, int qos_count, const int *granted_qos)
    {
    	int i;
    
    	printf("Subscribed (mid: %d): %d", mid, granted_qos[0]);
    	for(i=1; i<qos_count; i++){
    		printf(", %d", granted_qos[i]);
    	}
    	printf("
    ");
    }
    
    void my_log_callback(struct mosquitto *mosq, void *userdata, int level, const char *str)
    {
    	/* Pring all log messages regardless of level. */
    	printf("%s
    ", str);
    }
    
    int main(int argc, char *argv[])
    {
    	int i;
    	char *host = "192.168.xx.xx";
    	int port = 1883;
    	int keepalive = 60;
    	bool clean_session = true;
    	struct mosquitto *mosq = NULL;
    
    	mosquitto_lib_init();
    	mosq = mosquitto_new(NULL, clean_session, NULL);
    	if(!mosq){
    		fprintf(stderr, "Error: Out of memory.
    ");
    		return 1;
    	}
    	mosquitto_log_callback_set(mosq, my_log_callback);
    	mosquitto_connect_callback_set(mosq, my_connect_callback);
    	mosquitto_message_callback_set(mosq, my_message_callback);
    	mosquitto_subscribe_callback_set(mosq, my_subscribe_callback);
    
    	if(mosquitto_connect(mosq, host, port, keepalive)){
    		fprintf(stderr, "Unable to connect.
    ");
    		return 1;
    	}
    
    	mosquitto_loop_forever(mosq, -1, 1);
    
    	mosquitto_destroy(mosq);
    	mosquitto_lib_cleanup();
    	return 0;
    }
    

    2、库目录结构
    image

    3、编译
    g++ ./testmosqutto.cpp -I ./include -L ./lib -lmosquitto
    4、ldd a.out提示找不到mosquitto库
    5、 sudo cp ./lib/libmosquitto.so /usr/lib/libmosquitto.so.1
    6、从新ldd
    image
    7、执行
    image
    8、mosquitto_new第一个参数如果指定名称,那么就使用指定名称,否则会自动生成clientid.
    9、也可以,指定路径,这样就会去当前路径下查找文件
    g++ ./testmosqutto.cpp -I ./include -L ./lib -lmosquitto -Wl,-rpath=./lib

    本博客是个人工作中记录,遇到问题可以互相探讨,没有遇到的问题可能没有时间去特意研究,勿扰。
    另外建了几个QQ技术群:
    2、全栈技术群:616945527,加群口令abc123
    2、硬件嵌入式开发: 75764412
    3、Go语言交流群:9924600

    闲置域名www.nsxz.com出售(等宽等高字符四字域名)。
  • 相关阅读:
    sqlserver游标使用误区
    工作笔记——sqlserver引号的运用
    疯狂JAVA——数组
    工厂模式、单例和多例
    数据库数据交互详解(一)
    2016-4-6
    2016-4-5 博问问题、答题和查看收获
    Maven+Spring Batch+Apache Commons VF学习
    你忽视的静态类的作用(必看)
    Wireshark抓包工具使用教程以及常用抓包规则
  • 原文地址:https://www.cnblogs.com/zhaogaojian/p/15361041.html
Copyright © 2020-2023  润新知