在下面的代码段中,我为订阅声明了username
和passqord
。
private final String userName = "user_1";
private final char[] password = "pass".toCharArray();
....
....
final MqttAndroidClient client_1 = new MqttAndroidClient(getApplicationContext(), serverURI,
clientID, persistenceDataDir, Ack.AUTO_ACK);
MqttConnectOptions opts = new MqttConnectOptions();
opts.setCleanSession(false);
opts.setWill(WILL_TOPIC, WILL_MSG.getBytes(), QoS, false);
opts.setKeepAliveInterval(keepAliveInterval);
opts.setUserName(userName);
opts.setPassword(password);
我从应用程序开始连接clean session = false
和client ID = 1
没有passwoed和用户名提供,我继续发布(从Pc到代理)我已订阅的主题的值(来自应用给经纪人。
稍后在subscribe
消息中,我在连接选项中设置了密码和用户名,并且未指定publish
消息的用户名和密码,并重新运行p。发生了什么,我收到了我所参与的主题的更新公布值。
之后,在publish
我指定了错误的用户名和密码并订阅了相同的主题,当我运行App时,我会正常收到这些值。
我错误地使用了密码和用户名?
要注意:我尝试了使用不同clientID
的相同程序,即使指定了错误的密码,我也会收到已发布的值。
答案 0 :(得分:0)
您需要设置一个acl文件和一个密码文件,以便使用户名和密码来控制对主题的访问。
请阅读mosqitto.conf和mosquitto_passwd手册页,了解这两个文件格式的详细信息