问题描述
我正在创建一个使用 MQTT 实现的应用程序。为此,我必须使用特定的 clientId 登录到 MQTT 服务器,其中在 clientId 的初始部分包含一个特定的字符串。使用这个 clientId,我无法通过代码端登录 MQTT 服务器。
但是使用 MQTT-Explorer 软件,我可以使用相同的凭据登录。如果我从 clientId 更改任何单词或稍后更改,那么我可以通过代码端登录。
我尝试过各种库,但都没有成功。其背后的原因可能是什么以及如何解决该问题?
我前面遇到了错误。
mqtt.event.error connection failure Connection lost (32109) - java.io.EOFException
我使用了“react-native-mqtt-new”库,我的 MQTT createClient 和通信代码如下
import MQTT from 'react-native-mqtt-new';
MQTT.createClient({
uri: 'mqtt://mqtt.demo.io:1883',//for demo
clientId: 'specific_string_randomnumber',//for demo
user: 'xxxxx',pass: 'xxxx',tls: false
}).then(function (client) {
client.on('closed',function () {
console.log('mqtt.event.closed');
});
client.on('error',function (msg) {
console.log(client);
console.log('mqtt.event.error',msg);
});
client.on('message',function (msg) {
console.log('mqtt.event.message',msg);
});
client.on('connect',function () {
console.log('connected');
client.subscribe('test/#',0);
client.publish('test',"demo",false);
});
client.connect();
}).catch(function (err) {
console.log(err,'err');
});
解决方法
此问题已修复。这个问题的原因是我用于我的要求的库。要求是连接 MQTT 协议 3.1.1 和“react-native-mqtt-new”库,我们连接到 MQTT 协议 3.1.0,这就是我收到错误的原因。
对于解决方案,我已将库更改为“react-native-native-mqtt”,现在它可以正常工作了。