关于flutter与django建立mqtt的研究

1. 使用mosquitto

这是一个mqtt服务器,用于广播数据

安装过程省略(有很多教程),安装完成后,可以在终端输入mosquitto,接下来就可以模拟这个一对多的发布者订阅模式了

订阅(topic1是订阅的主题,也可以是别的):mosquitto_sub -v -t topic1

发布:mosquitto_pub -t topic1 -m 消息内容

如下,是一个模拟过程:

首先,打开三个终端,这三个终端都输入"mosquitto_sub -v -t t1"表示这三个终端都订阅了这个主题:(图片放错啦,请将下面的topic1换成t1)

接着,再来一个终端,输入

bash 复制代码
mosquitto_pub -t t1 -m "Hello, MQTT!"

消息内容,去发布消息(接着这三个订阅这个主题的终端都可以接受到这个消息):

2. mosquitto设置局域网可访问

在mosquitto的安装目录,如"C:\Program Files\mosquitto"下,找到"mosquitto.conf"文件,插入两行:(分别表示端口和局域网可访问)

接下来,我们换一种方式去使用mosquitto,在"C:\Program Files\mosquitto"下打开终端,输入:

bash 复制代码
mosquitto -c mosquitto.conf -v

这就表示按照配置去运行mosquitto服务器啦,接着我们来换一种方式模拟,开几个终端,输入如下:(实际上还应该输入-h mosquitto服务器的ip,但是现在是在一台电脑上的操作,就省事儿了)

接着我们再起一个终端,用于发布消息,如下:(输入:"mosquitto_pub -t t334 -p 8889 -m 这是给t334QQQQQQQ的消息!"等消息)

3. flutter使用mqtt

话不多说,安装:

javascript 复制代码
mqtt_client: ^10.3.0

使用:(运行,服务端会检测到)

【注】:如果是真机有问题(貌似需要配置ssl)目前只能电脑本地模拟器运行,等评论区大佬解决😂(等作者解决估计要很久)

Dart 复制代码
import 'package:flutter/material.dart';
import 'package:mqtt_client/mqtt_client.dart';
import 'package:mqtt_client/mqtt_server_client.dart';

main(){runApp(const MaterialApp(home: H(),));}
class H extends StatefulWidget {
  const H({super.key});

  @override
  State<H> createState() => _HState();
}

class _HState extends State<H> {
  final client = MqttServerClient.withPort('192.168.101.21', "small_sun", 8889);
  String _resStr = "";
  Future<void> initClient() async {

    client.logging(on: false); //是否开启日志,这里就不看看日志了
    client.keepAlivePeriod = 20; //设置超时时间
    try {
      // await client.connect(username, password); //开始连接
      await client.connect();// 一般需要输入密码,如:client.connect(username, password);
      print('mqtt连接啦');
    } catch (e) {
      client.disconnect();
    }
    if (client.connectionStatus?.state == MqttConnectionState.connected) {
    } else {
      client.disconnect();
    }

    client.subscribe("t1", MqttQos.atMostOnce);// 订阅的主题1
    client.subscribe("t2", MqttQos.atMostOnce);// 订阅的主题2
    //监听服务器发来的信息
    client.updates?.listen((List<MqttReceivedMessage<MqttMessage>> c) {
      final MqttPublishMessage recMess = c[0].payload as MqttPublishMessage;
      // 返回的数据
      final String pt = MqttPublishPayload.bytesToStringAsString(recMess.payload.message);
      print('订阅的主题:${c[0].topic}');
      print('服务器返回的数据信息:$pt');
      setState(() {
        _resStr = pt;
      });
    });
  }
  @override
  void initState() {
    super.initState();
    initClient();

  }
  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(title:const  Text("MQTT test",),backgroundColor: Colors.green,),
      body: Center(child: Text(_resStr,style: const TextStyle(fontSize: 40)),),
    );
  }
}

显示:

模仿第二点,向mosquitto发送代理后,手机显示:

本文参考资料:(感谢这位大佬!)Flutter框架高阶------使用MQTT协议进行信息传输_flutter mqtt-CSDN博客

相关推荐
程序员老刘·8 小时前
Perry能取代Flutter吗?跨平台的三种技术路线
flutter·跨平台开发·客户端开发
西西学代码15 小时前
Flutter---侧边栏
flutter
xmdy586616 小时前
Flutter+开源鸿蒙实战|企业级工具APP Day2 全局网络封装与 Dio 拦截器实战(鸿蒙兼容版)
flutter·开源·harmonyos
xmdy586616 小时前
Flutter+开源鸿蒙实战:企业级工具类APP开发教程(含第三方库适配)
flutter·开源·harmonyos
Swift社区17 小时前
Flutter / React / ArkUI:在鸿蒙 PC 上怎么选?
flutter·react.js·harmonyos
恋猫de小郭18 小时前
Android Studio 放着没怎么用,怎么也会越来越卡?
android·前端·flutter
xmdy58662 天前
Flutter + 开源鸿蒙跨端实战|基于空间地理信息的**城市全域智慧泊车调度与多维运维管理平台** Day1 项目架构基座与工程化环境搭建
flutter·开源·harmonyos
KillerNoBlood2 天前
2026移动端跨平台开发面经总结
android·算法·flutter·ios·移动开发·鸿蒙·kmp
xmdy58662 天前
Flutter+开源鸿蒙全域智慧泊车调度管理平台 Day4 订单全流程闭环+支付核验+会员权益+个人中心开发
flutter·开源·harmonyos
W蘭2 天前
Flutter从入门到实战-01-Dart语言基础
flutter