目录
  • 引言
  • ios 需要单独去设置
  • Ping 知识点
  • 步骤
    • 第一步:导包,加入图片素材
    • 第二步:ping 业务实现
    • 第三步:用图片显示信号强度
  • 小结

    引言

    对通讯敏感的程序中,我们除了检查当前网络通道外,还要检查与服务器实际的型号强度。

    一般我们采用 ping 的方式返回型号的强度和稳定程度。

    dart_ping 包

    https://pub-web.flutter-io.cn/packages/dart_ping

    ios dart_ping 包

    https://pub-web.flutter-io.cn/packages/dart_ping_ios

    ios 需要单独去设置

    Flutter Ping检查服务器通讯信号强度实现步骤

    Ping 知识点

    Ping 是一种常用的网络工具,用于测试网络设备之间的连通性和延迟。Ping 工具通过向目标设备发送一个 ICMP Echo Request 数据包,然后等待目标设备返回一个 ICMP Echo Reply 数据包,来检测目标设备的可达性和延迟。以下是关于 Ping 工具的一些重要信息:

    作用:

    • 测试网络设备之间的连通性和延迟
    • 发现网络故障和嗅探网络拓扑结构
    • 验证网络性能和带宽

    性能指标:

    • 延迟(Latency):指的是从发送一个数据包到接收到相应数据包所需的时间。
    • 丢包率(Packet Loss Rate):指的是在发送和接收数据包之间丢失的数据包的比例。
    • 带宽(Bandwidth):指的是网络中可用的数据传输速率,通常以比特/秒(bps)为单位。

    如何判断:

    • 延迟:通常使用 Ping 工具的平均延迟来判断网络连接的延迟状况,如果延迟较高,可能会影响网络应用程序的性能。
    • 丢包率:如果 Ping 工具返回的丢包率较高,可能意味着网络连接不稳定,可能会影响网络应用程序的可靠性。
    • 带宽:如果 Ping 工具返回的延迟比较高,可能意味着网络瓶颈,可能会影响网络应用程序的带宽和性能。

    步骤

    第一步:导包,加入图片素材

    pubspec.yaml

    dart_ping 包

    dependencies:
      flutter:
        sdk: flutter
        ...
      dart_ping: ^8.0.1

    图片

    assets:
        - assets/images/

    第二步:ping 业务实现

    lib/ping.dart

    成员变量

    // 检测域名
      final String _domain = 'baidu.com';
      // 信号量
      int _signalStrength = 0;
      // 返回信息
      String _resString = '';

    ping 操作执行

    // 执行 ping
      void _doPing() {
        _resString = 'ping $_domain \n\n';
        final ping = Ping(_domain, count: 20);
        ping.stream.listen((event) {
          print(event);
          if (event.error != null) {
            // 错误
            setState(() {
              _resString = event.error.toString();
            });
          } else {
            if (event.response != null) {
              // 单次信息
              setState(() {
                _resString += '${event.response}\n';
              });
              // 信号强度
              _signalStrength = calculateSignalStrength(
                  event.response?.time?.inMilliseconds ?? 0);
            }
            // 总计
            if (event.summary != null) {
              setState(() {
                _resString += '\n${event.summary}\n';
              });
            }
          }
        });
      }

    信号强度

    // 信号强度 0 ~ 5 , 5 最好,0 最差
      int calculateSignalStrength(int pingDelay) {
        if (pingDelay < 0) {
          // 无网络连接
          return 0;
        } else if (pingDelay < 100) {
          // 延迟 < 100ms,信号强度为 5
          return 5;
        } else if (pingDelay < 200) {
          // 延迟 < 200ms,信号强度为 4
          return 4;
        } else if (pingDelay < 300) {
          // 延迟 < 300ms,信号强度为 3
          return 3;
        } else if (pingDelay < 500) {
          // 延迟 < 500ms,信号强度为 2
          return 2;
        } else {
          // 延迟 >= 500ms,信号强度为 1
          return 1;
        }
      }

    视图

    Widget _mainView() {
        return Center(
          child: Column(
            children: [
              ElevatedButton(
                onPressed: _doPing,
                child: const Text('Start Ping'),
              ),
              Text('信号强度: $_signalStrength'),
              Text(_resString),
            ],
          ),
        );
      }
    @override
      Widget build(BuildContext context) {
        return Scaffold(
          appBar: AppBar(
            title: const Text('Ping'),
          ),
          body: _mainView(),
        );
      }

    第三步:用图片显示信号强度

    信号图片

    // 信号强度图片
      Widget _buildSignalIcon(BuildContext context) {
        String iconAsset = 'assets/images/signal-$_signalStrength.png';
        return Image.asset(
          iconAsset,
          width: 28,
          height: 28,
          fit: BoxFit.fill,
        );
      }
    Widget _mainView() {
        return Center(
          child: Column(
            children: [
              ...
              _buildSignalIcon(context),
              ...
            ],
          ),
        );
      }

    代码

    小结

    总之,Ping 工具是一种简单而有效的网络工具,可以帮助用户测试网络连通性和性能,及时发现和解决网络问题。请在网路应用 Flutter 中开启这个功能~

    以上就是Flutter Ping 检查服务器通讯信号强度的详细内容,更多关于Flutter Ping服务器通讯信号的资料请关注其它相关文章!

    声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。