Flutter开发进阶之使用Socket实现主机服务

这篇具有很好参考价值的文章主要介绍了Flutter开发进阶之使用Socket实现主机服务。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

Flutter开发进阶之使用Socket实现主机服务

在Flutter开发实践中,有一些业务是需要主从机合作搭配的服务,其中一些重要的数据和功能是交由主机进行存储和管理,从机再通过UDP和TCP与主机通讯去获得权限,一般在同一个局域网内的多端实现。
Flutter开发进阶之使用Socket实现主机服务,Flutter,移动端开发进阶,flutter,websocket,tcp,udp,dart

广播

在主从机未建立联系之前,主从机除了自身的权限是已知的是不知道任何其他设备的信息的,这时候就需要利用到UDP的广播,因为在局域网中,UDP广播是一种允许设备向网络中的所有其他设备发送消息的技术;
广播地址通常是255.255.255.255,或者网络地址和主机地址的组合,主从机约定好广播的端口后,主机需要监听指定端口的UDP广播。

  void udp_listen() async {
    // 监听所有可用地址5000端口的广播
    _socket = await RawDatagramSocket.bind("0.0.0.0", 5000);
    _socket?.listen((event) {
      switch (event) {
        case RawSocketEvent.read:
          Datagram? datagram = _socket?.receive();
          if (datagram != null) {
            const decoder = Utf8Decoder();
            print(decoder.convert(datagram.data));
            // 获取到广播信息,内容可能包括指定的加密后信息,可以是广播类型或者IP地址等
          }
          break;
        case RawSocketEvent.write:
          break;
        case RawSocketEvent.readClosed:
          break;
        case RawSocketEvent.closed:
          break;
      }
    }, onDone: () {
      _socket?.close();
      _socket = null;
    });
  }

主机开启监听后,从机可以发送广播了。

void udp_send() async {
    _socket = await RawDatagramSocket.bind("0.0.0.0", 5000);
    var message = "xxxxxxxxxx";
    final data = Uint8List.fromList(message.codeUnits);
    await _socket?.send(data, InternetAddress.anyIPv4, 5000);
  }

此时主从机已经完成了数据交互,主机已获知了从机的相关信息,可以建立指定的广播或者直接建立TCP通讯了;
此时我们可以使用flutter_socket_io库进行TCP通信,可以通过创建自定义的连接池来管理连接,连接池可以帮助你重用现有的连接,而不是为每个请求创建新的连接,从而提高性能和效率。

连接池

dependencies:  
  flutter_socket_io: ^latest_version

创建一个自定义的连接池类,这个类将负责管理连接的生命周期和重用现有的连接。

class ConnectionPool {  
  final int maxConnections = 5; // 设置最大连接数  
  final String host = '127.0.0.1'; // 设置服务器地址  
  final int port = 8080; // 设置服务器端口  
  
  Map<int, Socket> _pool = {}; // 用于存储连接的映射  
  int _nextId = 0; // 用于生成唯一的连接ID  
  
  Socket getConnection() {  
    int id = _nextId++;  
    Socket socket = Socket.fromAddress(host, port);  
    _pool[id] = socket;  
    return socket;  
  }  
  
  void releaseConnection(Socket socket) {  
    // 在这里实现连接释放的逻辑,例如关闭连接等操作  
  }  
}

收发消息

以下是一些简单的示例,实际开发中还需注意后续的线程安全、各种网络异常等问题。文章来源地址https://www.toymoban.com/news/detail-812566.html

Socket socket = connectionPool.getConnection();
socket.listen((data) {  
  print('Received: $data');  
});
Future<String> sendMessage(String message) async {  
    try {  
      Socket socket = connectionPool.getConnection(); // 获取连接  
      // 使用socket发送消息并处理响应  
      socket.write('你要发送的消息');
      // ...  
      socket.close(); // 释放连接  
      return 'Message sent successfully';  
    } catch (e) {  
      print('Error sending message: ${e.toString()}');  
      return 'Failed to send message';  
    }  
  }  

到了这里,关于Flutter开发进阶之使用Socket实现主机服务的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 12、利用NAT/NAPT实现外网主机访问内网服务器(思科)

    •网络地址转换NAT(Network Address Translation),被广泛应用于各种类型Internet接入方式和各种类型的网络中。原因很简单,NAT不仅完美解决了IP地址不足的问题,而且还能够有效地避免来自网络外部的攻击,隐藏并保护网络内部的计算机。 •默认情况下,内部IP地址是无法被路由

    2024年02月03日
    浏览(32)
  • prometheus使用node_exporter监控Linux主机CPU、内存、磁盘、服务运行状况

    目录 1.node_exporter简介 2.部署node_exporter 2.1.安装node_exporter 2.2.编写system启动脚本 3.prometheus监控Linux主机 3.1.修改配置文件增加主机节点 3.2.主机添加成功 4.监控Linux主机CPU、内存、磁盘使用率 4.1.监控CPU使用率 4.1.1.获取空闲CPU监控数据 4.1.2.获取5分钟内的监控数据 4.1.3.获取5分钟

    2024年04月16日
    浏览(35)
  • shell脚本使用(宿主机windows-服务器-centos)--用于使用shell脚本方式控制docker容器

    需求: 我想要使得windows上编写shell脚本,并且在这个shell脚本在linux中也可用 shell脚本在windows上无法直接运行,但是有WSL这个linux子系统的工具 可以使得shell脚本在主机上执行 视频讲解连接 方式1 方式2

    2024年02月07日
    浏览(39)
  • 如何将PC电脑变成web服务器:将内网主机映射到外网实现远程访问

    我是艾西,今天跟大家分享内容还是比较多人问的一个问题:如何将PC电脑变成web服务器。内网主机作为web服务器,内容包括本地内网映射、多层内网映射解决方案、绕过电信80端口封锁、DDNS功能的实现(非花生壳)、网站加速等。这也是很多人想知道怎么弄怎么设置的方法

    2024年02月11日
    浏览(32)
  • Cisco Packet Tracer 思科模拟器利用NAT实现外网主机访问内网服务器

    前两篇讲解了动态NAT地址转换,以及静态NAT地址转换,本篇文章主要讲解如何理由NAT实现外网主机访问内网服务器,含有重分布教学 情境分析 公司只申请了一个公网IP地址,基于私有地址与公有地址不能直接通信的原则,公网的计算机是不能直接访问内网服务器,要实现内网

    2024年02月07日
    浏览(56)
  • Linux【安全 01】云服务器主机安全加固(修改SSHD端口、禁用登陆失败的IP地址、使用密钥登录)

    修改SSHD的默认端口,它可以抵御一些简单的密码暴力破解脚本。 查看登录失败的IP地址 通过下面的命令将这些登陆失败的IP加入服务器访问限制名单【失败次数最多的10个IP】 使用SSH密钥,并禁用密码登录,以MobaXterm为例进行说明。 以下命令在本机上执行(Windows) 使用Mob

    2024年02月05日
    浏览(48)
  • windows10ftp搭建,实现主机与虚拟机文件传输文件,以及解决FTP文件夹错误,无法与服务器建立连接。

    1.我是用的win10虚拟机来搭建ftp 首先,打开控制面板,点击程序 2.选择启用或关闭Windows功能 3.勾选以下选项,点击确定。这一步的主要目的是开启IIS管理控制台 进入等待 4.搜索IIS管理器,双击打开  5.右击网站,选择添加FTP站点  6.这时弹出下面界面, FTP站点名称 任意填写,

    2024年02月08日
    浏览(42)
  • 【2023】使用WIN/iOS/iPadOS/Android的远程办公方案(服务器开启多隧道,可打通多台远程win主机)

    【2023】使用WIN/iOS/iPadOS/Android的远程办公方案(服务器开启多隧道,可打通多台远程win主机) 本人原发布链接 https://zhuanlan.zhihu.com/p/641285762 简介:使用服务器开启多个隧道,让多台主机能够通过公网ip暴露出来,方便远程连接。 前传:https://zhuanlan.zhihu.com/p/352342803 最近需要再

    2024年02月13日
    浏览(28)
  • ubuntu主机开启ssh服务,ubuntu通过ssh访问主机

    要在Ubuntu上通过SSH(Secure Shell)访问另一台主机,您需要确保几件事情: 目标主机上的SSH服务器 :确保您要访问的主机上安装并运行了SSH服务器(例如OpenSSH服务器)。 网络连接 :确保您的Ubuntu系统与目标主机在同一网络上,或者可以通过网络路由访问对方。 目标主机的

    2024年02月03日
    浏览(46)
  • ROS主机搭建NFS服务器,虚拟机通过挂载访问及修改主机文件

       本文主要介绍在ROS主机中搭建NFS服务器,虚拟机(从机)通过nfs挂载的方式访问及修改主机中文件的方法    一、ROS主机NFS服务器搭建:    若机器人配有显示屏,此部分可直接在机器人上操作,否则,可通过SSH远程登录的方式,在虚拟机上进行远程登录后操作,下

    2023年04月22日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包