使用mosquitto客户端库的C程序无法正常工作

时间:2015-09-09 12:12:39

标签: c client mosquitto broker

任何人都可以告诉我为什么以下代码无效?

#include<mosquitto.h>
#include<stdio.h>
#include<string.h>
#include<stdlib.h>

int main() {
    char id[4] = "4567";
    char *host = "localhost";
    int port = 61613;
    int keepalive = 60;
    const char *msg1 = "{ \"data\":\"Hello\" }";
    bool clean_session = false;
    const char *top = "data/test/abc";
    struct mosquitto *mosq = NULL;

    mosquitto_lib_init();

    mosq = mosquitto_new(id,clean_session,NULL);
    if(!mosq){
        printf("Not Created");
        return 1;
    }
    mosquitto_username_pw_set(mosq,"admin","password");

    printf("%s\n",mosquitto_strerror(mosquitto_connect(mosq,host,port,keepalive)));

    int err = mosquitto_publish(mosq,NULL,"admin",strlen(msg1),msg1,1,true);
    printf("Error number: %d",err);
    printf("\nerr description=%s\n", mosquitto_strerror(err));  


    mosquitto_destroy(mosq);
    mosquitto_lib_cleanup();
    return 0;
}

我正在使用apollo代理,我编译了代码并且其工作没有任何错误,但发布的消息没有到达代理

1 个答案:

答案 0 :(得分:1)

您应该查看mosquitto_loop*()函数,您需要使用其中一个来确保处理网络流量。 mosquitto_publish()完全是异步的,并且在返回时不保证传递。如果您想确保邮件已发送,请使用on_publish回调。

我会建议这样的事情:

void on_publish(struct mosquitto *mosq, void *userdata, int mid)
{
    mosquitto_disconnect(mosq);
}

int main(int argc, char *argv[])
{
    struct mosquitto *mosq;

    mosq = mosquitto_new("id", true, NULL);
    mosquitto_publish_callback_set(mosq, on_publish);

    mosquitto_connect(mosq, "example.net", 1883);
    mosquitto_publish(mosq, NULL, "topic, 11, "hello world", 0, false);
    mosquitto_loop_forever(mosq, -1, 1);  // this calls mosquitto_loop() in a loop, it will exit once the client disconnects cleanly

    return 0;
}