1、安装
sudo apt-add-repository ppa:mosquitto-dev/mosquitto-ppa
sudo apt-get update
sudo apt-get install mosquitto
sudo apt-get install mosquitto-clients
2、测试
sudo service mosquitto status
3、常用命令
订阅主题
mosquitto_sub -h localhost -p 1883 -u root -P root -t topicname
推送消息
mosquitto_pub -h localhost -p 1883 -u root -P root -t topicname -m "发送的消息内容"
查看mosquitto的进程
ps -aux | grep mosquitto
杀掉进程#
kill -9 18248
启动#
mosquitto -c /etc/mosquitto/mosquitto.conf -d
4、官方开发文档
mosquitto库函数https://mosquitto.org/api/files/mosquitto-h.html
说明文档https://mosquitto.org/man/
5、mosquitto开发示例
//添加的头文件
#include <mqtt_protocol.h>
#include <mosquitto.h>
#define client_ID "test"
#define username "admin"
#define passward "123456"
#define host "localhost"
#define port 1883
#define keepalive 60
static bool clean_session = false;
//初始化
int mosquitto_Init()
{
int err = 0;
//libmosquitto 库初始化
err = mosquitto_lib_init();
if (err < 0) {
printf("mosquitto lib init fail...error code %d\r\n",err);
}
//创建mosquitto客户端
struct mosquitto *mosq = mosquitto_new(client_ID, clean_session, NULL);
if (mosq == NULL) {
printf("\r\ncreate client failed...%d\r\n", errno);
mosquitto_lib_cleanup();
return 1;
}
//增加mqtt5.0支持
mosquitto_int_option(mosq, MOSQ_OPT_PROTOCOL_VERSION, MQTT_PROTOCOL_V5);
//设置回调函数
mosquitto_connect_v5_callback_set(mosq, mqtt_connect_v5_callback);
mosquitto_message_v5_callback_set(mosq, mqtt_message_v5_callback);
mosquitto_subscribe_v5_callback_set(mosq, mqtt_subscribe_v5_callback);
mosquitto_log_callback_set(mosq, mqtt_log_callback);
//设置用户名和密码
err = mosquitto_username_pw_set(mosq, username, passward);
if(err != MOSQ_ERR_SUCCESS) {
printf("username_pw set fail... err code %d\r\n", err);
}
//客户端连接服务器
err = mosquitto_connect(mosq, host, port, keepalive);
if (err < 0) {
printf("connect fail\r\n");
return 1;
}
//主线成将被阻塞至此
err = mosquitto_loop_forever(mosq, -1, 1);
if (err < 0) {
printf("mosquitto loop fail\r\n");
}
mosquitto_disconnect_v5(mosq, MQTT_RC_NORMAL_DISCONNECTION, NULL);
mosquitto_loop_stop(mosq, true);
mosquitto_destroy(mosq);
mosquitto_lib_cleanup();
return 0;
}
//连接成功订阅函数回调
void mqtt_connect_v5_callback(struct mosquitto *mosq,
void *userdata,
int result,
int flag,
const mosquitto_property *props
)
{
int i, rc;
if(!result){
/* Subscribe to broker information topics on successful connect. */
rc = mosquitto_subscribe_v5(mosq, NULL, "test", 2, 0, NULL);
if(rc!= MOSQ_ERR_SUCCESS) {
printf("ERROR subscribe code:%d\r\n", rc);
}
}else{
printf("Connect failed\r\n");
}
}
//消息接收回调函数
void mqtt_message_v5_callback(struct mosquitto *mosq,
void *userdata,
const struct mosquitto_message *message,
const mosquitto_property *props
)
{
if(message->payloadlen){
//接收
printf("topic: %s, length: %d, data: %s\r\n", message->topic, message->payloadlen, (char *)message->payload);
}else{
//printf("%s (null)\r\n", message->topic);
}
}
//订阅成功回调函数
void mqtt_subscribe_v5_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("\r\n");
}
//日志回调函数
void mqtt_log_callback(struct mosquitto *mosq, void *userdata, int level, const char *str)
{
// printf("log__ %s\r\n", str);
}
//发布函数
mosquitto_publish_v5(mosq, NULL, topic, len, payload, qos, retain, NULL);