flutter: client Connection exception - WebSocketException: Connection to 'https://aaa.bbb.ccc:xxxx#' was not upgraded to websocket
搞崩溃了,一直调不通,github上也没有解决办法
一直试,一直试,一直试,居然就可以连接成功了。。。
复制个源码吧,我也不知道是哪儿设置对了,然后就可以连接了
mqtt_client: ^7.3.0
import 'dart:async';
import 'dart:math';
import 'package:mqtt_client/mqtt_client.dart';
import 'package:mqtt_client/mqtt_server_client.dart';
Future<int> mqttManager() async {
final client = MqttServerClient.withPort(
'ws://aa.bbb.ccc.ccc',
'',
8083,
maxConnectionAttempts: 10,
);
///用户名
String username = 'XXXXX';
///密码
String password = 'BBBBB';
///是否开启日志
client.logging(on: false);
///设置超时时间
client.keepAlivePeriod = 60;
///设置连接成功的回调
client.onConnected = onConnected;
///设置断开连接的回调
client.onDisconnected = onDisconnected;
///ping的回调
client.pongCallback = pong;
client.useWebSocket = true;
client.websocketProtocols = ['mqtt'];
///订阅的回调
client.onSubscribed = onSubscribed;
final connMess = MqttConnectMessage()
.authenticateAs(username, password)
.withClientIdentifier('seda@1234567890')
.keepAliveFor(60) // Must agree with the keep alive set above or not set
.withWillTopic('willtopic') // If you set this you must set a will message
.withWillMessage('My Will message')
.startClean() // Non persistent session for testing
.withWillQos(MqttQos.atLeastOnce);
print('mqtt:正在连接中...$connMess');
client.connectionMessage = connMess;
///开始连接
try {
await client.connect();
} on Exception catch (e) {
print('mqtt连接异常 - $e');
client.disconnect();
}
///检查连接结果
if (client.connectionStatus.state == MqttConnectionState.connected) {
print('mqtt已连接');
} else {
print(
'mqtt连接:失败 - disconnecting, state is ${client.connectionStatus.state}');
client.disconnect();
// exit(-1);
}
///订阅一个topic: 服务端定义的事件 当服务器发送了这个消息,就会在 client.updates.listen 中收到
const topic = 'slab/sichuan/seda/rtdata'; // Not a wildcard topic
// const topic = 'envp/sichuan/yongsheng/rtdata'; // Not a wildcard topic
client.subscribe(topic, MqttQos.atLeastOnce);
///监听服务器发来的信息
client.updates.listen((dynamic c) {
final MqttPublishMessage recMess = c[0].payload;
///服务器返回的数据信息
final pt =
MqttPublishPayload.bytesToStringAsString(recMess.payload.message);
print('服务器返回的数据信息: topic is <${c[0].topic}>, payload is <-- $pt -->');
});
///设置public监听,当我们调用 publishMessage 时,会告诉你是都发布成功
client.published.listen((MqttPublishMessage message) {
print('message-----$message');
});
return 0;
}
/// The subscribed callback
void onSubscribed(String topic) {
print('订阅内容: $topic');
}
/// The unsolicited disconnect callback
void onDisconnected() {
print('mqtt连接:关闭');
// exit(-1);
}
void onConnected() {
print('mqtt连接:成功');
}
void pong() {
print('mqtt连接:ping');
}