关于客户机未连接 (32104) 的处理

JAVA开发过程中使用mqtt消息订阅和发布时会出现客户机未连接的报错,只要在订阅和发布的方法里添加创建链接就可以

/**

* 连接 MQTT

*/

public void connect() {

try {

System.err.println("clientid----------"+clientId);

client = new MqttClient(hostUrl, clientId, new MemoryPersistence());

// MQTT 连接选项

MqttConnectOptions connOpts = new MqttConnectOptions();

connOpts.setUserName(username);

connOpts.setPassword(password.toCharArray());

// 保留会话

connOpts.setCleanSession(true);

// 设置超时时间,单位秒

connOpts.setConnectionTimeout(timeout);

// 设置心跳时间,单位秒,表示服务器每隔1.5*20秒的时间向客户端发送心跳判断客户端是否在线

connOpts.setKeepAliveInterval(keepAlive);

// 设置回调

client.setCallback(new OnMessageCallback());

// 建立连接

client.connect(connOpts);

} catch (MqttException me) {

System.out.println("reason " + me.getReasonCode());

System.out.println("msg " + me.getMessage());

System.out.println("loc " + me.getLocalizedMessage());

System.out.println("cause " + me.getCause());

System.out.println("excep " + me);

me.printStackTrace();

}

}

/**

* 订阅

*

* @param topic 主题

*/

public void subscribe(String topic) {

try {

client.subscribe(topic, qos);

} catch (MqttException me) {

me.printStackTrace();

connect();

}

}

/**

* 消息发布

*

* @param topic 主题

* @param data 消息

*/

public void publish(String topic, String data) {

try {

MqttMessage message = new MqttMessage(data.getBytes());

message.setQos(1); // 消息服务质量等级

message.setRetained(true); // 保留消息

client.publish(topic, message);

} catch (MqttException me) {

me.printStackTrace();

connect();

}

}

/**

* 断开连接

*/

public void disconnect() {

try {

client.disconnect();

client.close();

} catch (MqttException me) {

me.printStackTrace();

}

}

  • 10
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值