只收到部分消息
Recieves only partial messages
我正在使用 MQTT 从我的服务器获取一些数据到我的应用程序。为此,我正在使用 Dart 的 mqtt_client 包。
我发送的数据是json,但它是作为字符串发送的,所以我怀疑问题出在那里(如果我错了请纠正我)
我可以完全收到一些消息,但有些消息没有完全收到。我 运行 另一台机器上的 mosquitto 订阅者收听与应用程序相同的消息,但正在打印完整的消息。
Flutter代码(相关部分):
void mqttConnect() async {
client = MqttServerClient(broker, '');
client.port = port;
client.logging(on: true);
client.keepAlivePeriod = 60;
client.onDisconnected = _onDisconnected;
client.onConnected = _onConnected;
final mqtt.MqttConnectMessage connMess = mqtt.MqttConnectMessage()
.withClientIdentifier(clientIdentifier)
.startClean() // Non persistent session for testing
.keepAliveFor(60)
.withWillQos(mqtt.MqttQos.atMostOnce);
client.connectionMessage = connMess;
try {
await client.connect(username, passwd);
} catch (e) {
print(e);
_disconnect();
}
// ignore: deprecated_member_use
if (client.connectionState == mqtt.MqttConnectionState.connected) {
connectionState = client.connectionState;
} else {
_disconnect();
}
client.updates.listen((List<MqttReceivedMessage<MqttMessage>> c) {
final MqttPublishMessage message = c[0].payload;
final payload =
MqttPublishPayload.bytesToStringAsString(message.payload.message);
print('Received message:$payload from topic: ${c[0].topic}>');
});
}
预期消息:
{
"Sensors": [
{
"Sensor_name": "esp3",
"Sensor_ID": "sensor_f6c068b81a054824b824bc6a883d677d",
"MAC_address": "00:CC:00:CC:00:CC",
"Value1": {
"Value_Name": "",
"Value_ID": "value_923bd7c893284a74affbf02170dbe5f2",
"Value": "",
"Unit": ""
},
"Value2": {
"Value_Name": "",
"Value_ID": "value_69c5deffeb664953a09fc60c93c8f0a7",
"Value": "",
"Unit": ""
},
"Value3": {
"Value_Name": "",
"Value_ID": "value_1b40bd7c83654a3686bfce7fddf6015f",
"Value": "",
"Unit": ""
},
"Value4": {
"Value_Name": "",
"Value_ID": "value_e6cf1f5393914ce7ba5bbc94164d24ed",
"Value": "",
"Unit": ""
},
"Value5": {
"Value_Name": "",
"Value_ID": "value_07d549690750422fbd9fcc385b18d040",
"Value": "",
"Unit": ""
},
"Value6": {
"Value_Name": "",
"Value_ID": "value_cd24d78e90284745b852289973838e05",
"Value": "",
"Unit": ""
}
},
{
"Sensor_name": "esp4",
"Sensor_ID": "sensor_a737e70afdbe491ca5b8a69da4f25e4c",
"MAC_address": "00:DD:00:DD:00:DD",
"Value1": {
"Value_Name": "",
"Value_ID": "value_1a420fc35c8142a7b73b6b473e75ff8e",
"Value": "",
"Unit": ""
},
"Value2": {
"Value_Name": "",
"Value_ID": "value_b11246b0fe1746dc849afa2f5dd2e35d",
"Value": "",
"Unit": ""
},
"Value3": {
"Value_Name": "",
"Value_ID": "value_d6c05f81205c439eb68f09ab3b1c080d",
"Value": "",
"Unit": ""
},
"Value4": {
"Value_Name": "",
"Value_ID": "value_c35860167f2546008e31a1ea3561b3fb",
"Value": "",
"Unit": ""
},
"Value5": {
"Value_Name": "",
"Value_ID": "value_f04f562130734192a295e3a8a085b4a5",
"Value": "",
"Unit": ""
},
"Value6": {
"Value_Name": "",
"Value_ID": "value_b4a7da43d54e487ba5122526e1948400",
"Value": "",
"Unit": ""
}
}
]
}
收到的消息:
{
"Sensors": [
{
"Sensor_name":"esp3",
"Sensor_ID":"sensor_f6c068b81a054824b824bc6a883d677d",
"MAC_address":"00:CC:00:CC:00:CC",
"Value1":{
"Value_Name":"",
"Value_ID":"value_923bd7c893284a74affbf02170dbe5f2",
"Value":"",
"Unit":""
},
"Value2":{
"Value_Name":"",
"Value_ID":"value_69c5deffeb664953a09fc60c93c8f0a7",
"Value":"",
"Unit":""
},
"Value3":{
"Value_Name":"",
"Value_ID":"value_1b40bd7c83654a3686bfce7fddf6015f",
"Value":"",
"Unit":""
},
"Value4":{
"Value_Name":"",
"Value_ID":"value_e6cf1f5393914ce7ba5bbc94164d24ed",
"Value":"",
"Unit":""
},
"Value5":{
"Value_Name":"",
"Value_ID":"value_07d549690750422fbd9fcc385b18d040",
"Value":"",
"Unit":""
},
"Value6":{
"Value_Name":"",
"Value_ID":"value_cd24d78e90284745b852289973838e05",
"Value":"",
"Unit":""
}
},
{
"Sensor_name":"esp4",
"Sensor_ID":"sensor_a737e70afdbe491ca5b8a69da4f25e4c",
"MAC_address":"00:DD:00:DD:00:DD",
"Value1":{
"Value_Name":"",
"Value_ID":"value_1a420fc35c8142a7b73b6b473e75ff8e",
"Value":"",
"Unit":""
},
"Value2":{
"Value_Name":"",
"Value_ID":"value_b11246b0fe1746dc849afa2f5dd2e
正如我之前所说,如果我 运行 我的终端上有一个 mosquitto 订阅者,并且收听相同的主题,那么在终端上收到的消息是完整的。但是在应用程序上,它只收到部分。
并非所有邮件都会出现这种情况,只有少数邮件会出现这种情况。
Flutter 的print 文本长度有限,无法打印大字符串。
你应该分成块。
尝试使用这个助手:
void printWrapped(String text) {
final pattern = RegExp('.{1,800}'); // 800 is the size of each chunk
pattern.allMatches(text).forEach((match) => print(match.group(0)));
}
来源:
我正在使用 MQTT 从我的服务器获取一些数据到我的应用程序。为此,我正在使用 Dart 的 mqtt_client 包。
我发送的数据是json,但它是作为字符串发送的,所以我怀疑问题出在那里(如果我错了请纠正我)
我可以完全收到一些消息,但有些消息没有完全收到。我 运行 另一台机器上的 mosquitto 订阅者收听与应用程序相同的消息,但正在打印完整的消息。
Flutter代码(相关部分):
void mqttConnect() async {
client = MqttServerClient(broker, '');
client.port = port;
client.logging(on: true);
client.keepAlivePeriod = 60;
client.onDisconnected = _onDisconnected;
client.onConnected = _onConnected;
final mqtt.MqttConnectMessage connMess = mqtt.MqttConnectMessage()
.withClientIdentifier(clientIdentifier)
.startClean() // Non persistent session for testing
.keepAliveFor(60)
.withWillQos(mqtt.MqttQos.atMostOnce);
client.connectionMessage = connMess;
try {
await client.connect(username, passwd);
} catch (e) {
print(e);
_disconnect();
}
// ignore: deprecated_member_use
if (client.connectionState == mqtt.MqttConnectionState.connected) {
connectionState = client.connectionState;
} else {
_disconnect();
}
client.updates.listen((List<MqttReceivedMessage<MqttMessage>> c) {
final MqttPublishMessage message = c[0].payload;
final payload =
MqttPublishPayload.bytesToStringAsString(message.payload.message);
print('Received message:$payload from topic: ${c[0].topic}>');
});
}
预期消息:
{
"Sensors": [
{
"Sensor_name": "esp3",
"Sensor_ID": "sensor_f6c068b81a054824b824bc6a883d677d",
"MAC_address": "00:CC:00:CC:00:CC",
"Value1": {
"Value_Name": "",
"Value_ID": "value_923bd7c893284a74affbf02170dbe5f2",
"Value": "",
"Unit": ""
},
"Value2": {
"Value_Name": "",
"Value_ID": "value_69c5deffeb664953a09fc60c93c8f0a7",
"Value": "",
"Unit": ""
},
"Value3": {
"Value_Name": "",
"Value_ID": "value_1b40bd7c83654a3686bfce7fddf6015f",
"Value": "",
"Unit": ""
},
"Value4": {
"Value_Name": "",
"Value_ID": "value_e6cf1f5393914ce7ba5bbc94164d24ed",
"Value": "",
"Unit": ""
},
"Value5": {
"Value_Name": "",
"Value_ID": "value_07d549690750422fbd9fcc385b18d040",
"Value": "",
"Unit": ""
},
"Value6": {
"Value_Name": "",
"Value_ID": "value_cd24d78e90284745b852289973838e05",
"Value": "",
"Unit": ""
}
},
{
"Sensor_name": "esp4",
"Sensor_ID": "sensor_a737e70afdbe491ca5b8a69da4f25e4c",
"MAC_address": "00:DD:00:DD:00:DD",
"Value1": {
"Value_Name": "",
"Value_ID": "value_1a420fc35c8142a7b73b6b473e75ff8e",
"Value": "",
"Unit": ""
},
"Value2": {
"Value_Name": "",
"Value_ID": "value_b11246b0fe1746dc849afa2f5dd2e35d",
"Value": "",
"Unit": ""
},
"Value3": {
"Value_Name": "",
"Value_ID": "value_d6c05f81205c439eb68f09ab3b1c080d",
"Value": "",
"Unit": ""
},
"Value4": {
"Value_Name": "",
"Value_ID": "value_c35860167f2546008e31a1ea3561b3fb",
"Value": "",
"Unit": ""
},
"Value5": {
"Value_Name": "",
"Value_ID": "value_f04f562130734192a295e3a8a085b4a5",
"Value": "",
"Unit": ""
},
"Value6": {
"Value_Name": "",
"Value_ID": "value_b4a7da43d54e487ba5122526e1948400",
"Value": "",
"Unit": ""
}
}
]
}
收到的消息:
{
"Sensors": [
{
"Sensor_name":"esp3",
"Sensor_ID":"sensor_f6c068b81a054824b824bc6a883d677d",
"MAC_address":"00:CC:00:CC:00:CC",
"Value1":{
"Value_Name":"",
"Value_ID":"value_923bd7c893284a74affbf02170dbe5f2",
"Value":"",
"Unit":""
},
"Value2":{
"Value_Name":"",
"Value_ID":"value_69c5deffeb664953a09fc60c93c8f0a7",
"Value":"",
"Unit":""
},
"Value3":{
"Value_Name":"",
"Value_ID":"value_1b40bd7c83654a3686bfce7fddf6015f",
"Value":"",
"Unit":""
},
"Value4":{
"Value_Name":"",
"Value_ID":"value_e6cf1f5393914ce7ba5bbc94164d24ed",
"Value":"",
"Unit":""
},
"Value5":{
"Value_Name":"",
"Value_ID":"value_07d549690750422fbd9fcc385b18d040",
"Value":"",
"Unit":""
},
"Value6":{
"Value_Name":"",
"Value_ID":"value_cd24d78e90284745b852289973838e05",
"Value":"",
"Unit":""
}
},
{
"Sensor_name":"esp4",
"Sensor_ID":"sensor_a737e70afdbe491ca5b8a69da4f25e4c",
"MAC_address":"00:DD:00:DD:00:DD",
"Value1":{
"Value_Name":"",
"Value_ID":"value_1a420fc35c8142a7b73b6b473e75ff8e",
"Value":"",
"Unit":""
},
"Value2":{
"Value_Name":"",
"Value_ID":"value_b11246b0fe1746dc849afa2f5dd2e
正如我之前所说,如果我 运行 我的终端上有一个 mosquitto 订阅者,并且收听相同的主题,那么在终端上收到的消息是完整的。但是在应用程序上,它只收到部分。
并非所有邮件都会出现这种情况,只有少数邮件会出现这种情况。
Flutter 的print 文本长度有限,无法打印大字符串。 你应该分成块。
尝试使用这个助手:
void printWrapped(String text) {
final pattern = RegExp('.{1,800}'); // 800 is the size of each chunk
pattern.allMatches(text).forEach((match) => print(match.group(0)));
}
来源: