Flutter Ping 检查服务器通讯信号强度

Flutter 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 需要单独去设置

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),
          ...
        ],
      ),
    );
  }

代码

https://github.com/ducafecat/flutter_develop_tips/tree/main/flutter_application_ping

小结

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

感谢阅读本文

如果我有什么错?请在评论中让我知道。我很乐意改进。


© 猫哥 ducafecat.com

end

本文由 mdnice 多平台发布

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值