gpt4 book ai didi

c - 客户端与 mqtt 代理断开连接后释放端口

转载 作者:行者123 更新时间:2023-11-30 19:42:07 25 4
gpt4 key购买 nike

我正在使用 apollo 代理和 mosquitto C 客户端库。成功发布消息后,我使用 mosquitto_disconnect(mosq) 函数断开客户端连接。但看起来客户端用于连接代理的端口仍然不是空闲的。有没有办法在c程序中手动释放客户端用于与代理连接的端口?

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

mosquitto_disconnect(mosq);

log_print("mqtt",1,"Inside publish callback");


}

int sendData_mqtt(char *address, char *port, char* url, char *data)
{
struct mosquitto *mosq;
int err;
char *clean_session = "true";
char *retain_flag = "true";
int port1= atoi(port);

mosq = mosquitto_new("unknown", clean_session, NULL);
mosquitto_publish_callback_set(mosq, on_publish);

mosquitto_username_pw_set(mosq,"admin","password");
err=mosquitto_connect(mosq, address,port1,60);
if(err != 0 ){
log_print("mqtt",1,"connect error= %s\n",mosquitto_strerror(err));
return -1;
}
else
log_print("mqtt",1,"successfully connected");
err = mosquitto_publish(mosq, NULL, "subject", strlen(data), data, 1, retain_flag);

sleep(5);
if(err != 0 ) {
log_print("mqtt",1,"Publish error = %s\n",mosquitto_strerror(err));
return -1;
}
mosquitto_loop_forever(mosq,-1,1);

return 10;
}

最佳答案

这应该自动发生,一旦 libmosquitto 认为它已经发送了 DISCONNECT 数据包,它将关闭套接字。

您是否调用了 mosquitto_loop_forever() 或 mosquitto_loop_start() 来处理网络流量?

您使用的 libmosquitto 版本是什么?

有没有可能经纪人在您没有意识到的情况下拒绝了您的凭据?尝试添加日志回调以查看发生了什么。

void on_log(struct mosquitto *mosq, void *userdata, int level, const char *msg)
{
printf("%s\n", msg);
}

并使用

mosquitto_log_callback_set(mosq, on_log);

我想说你也需要回到基础知识。查看 clean_session 并保留 mosquitto_new 和 mosquitto_publish 的参数 - 它们不应该是设置为“true”的 char * 字符串。阅读文档,了解有哪些工具可供您进行调试(例如 on_log),然后进行一些调试。也许查看源代码,看看您期望发生什么。

关于c - 客户端与 mqtt 代理断开连接后释放端口,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32777416/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com