Flutter?Ping檢查服務(wù)器通訊信號(hào)強(qiáng)度實(shí)現(xiàn)步驟
引言
對(duì)通訊敏感的程序中,我們除了檢查當(dāng)前網(wǎng)絡(luò)通道外,還要檢查與服務(wù)器實(shí)際的型號(hào)強(qiáng)度。
一般我們采用 ping 的方式返回型號(hào)的強(qiáng)度和穩(wěn)定程度。
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 需要單獨(dú)去設(shè)置

Ping 知識(shí)點(diǎn)
Ping 是一種常用的網(wǎng)絡(luò)工具,用于測(cè)試網(wǎng)絡(luò)設(shè)備之間的連通性和延遲。Ping 工具通過(guò)向目標(biāo)設(shè)備發(fā)送一個(gè) ICMP Echo Request 數(shù)據(jù)包,然后等待目標(biāo)設(shè)備返回一個(gè) ICMP Echo Reply 數(shù)據(jù)包,來(lái)檢測(cè)目標(biāo)設(shè)備的可達(dá)性和延遲。以下是關(guān)于 Ping 工具的一些重要信息:
作用:
- 測(cè)試網(wǎng)絡(luò)設(shè)備之間的連通性和延遲
- 發(fā)現(xiàn)網(wǎng)絡(luò)故障和嗅探網(wǎng)絡(luò)拓?fù)浣Y(jié)構(gòu)
- 驗(yàn)證網(wǎng)絡(luò)性能和帶寬
性能指標(biāo):
- 延遲(Latency):指的是從發(fā)送一個(gè)數(shù)據(jù)包到接收到相應(yīng)數(shù)據(jù)包所需的時(shí)間。
- 丟包率(Packet Loss Rate):指的是在發(fā)送和接收數(shù)據(jù)包之間丟失的數(shù)據(jù)包的比例。
- 帶寬(Bandwidth):指的是網(wǎng)絡(luò)中可用的數(shù)據(jù)傳輸速率,通常以比特/秒(bps)為單位。
如何判斷:
- 延遲:通常使用 Ping 工具的平均延遲來(lái)判斷網(wǎng)絡(luò)連接的延遲狀況,如果延遲較高,可能會(huì)影響網(wǎng)絡(luò)應(yīng)用程序的性能。
- 丟包率:如果 Ping 工具返回的丟包率較高,可能意味著網(wǎng)絡(luò)連接不穩(wěn)定,可能會(huì)影響網(wǎng)絡(luò)應(yīng)用程序的可靠性。
- 帶寬:如果 Ping 工具返回的延遲比較高,可能意味著網(wǎng)絡(luò)瓶頸,可能會(huì)影響網(wǎng)絡(luò)應(yīng)用程序的帶寬和性能。
步驟
第一步:導(dǎo)包,加入圖片素材
pubspec.yaml
dart_ping 包
dependencies:
flutter:
sdk: flutter
...
dart_ping: ^8.0.1圖片
assets:
- assets/images/第二步:ping 業(yè)務(wù)實(shí)現(xiàn)
lib/ping.dart
成員變量
// 檢測(cè)域名 final String _domain = 'baidu.com'; // 信號(hào)量 int _signalStrength = 0; // 返回信息 String _resString = '';
ping 操作執(zhí)行
// 執(zhí)行 ping
void _doPing() {
_resString = 'ping $_domain \n\n';
final ping = Ping(_domain, count: 20);
ping.stream.listen((event) {
print(event);
if (event.error != null) {
// 錯(cuò)誤
setState(() {
_resString = event.error.toString();
});
} else {
if (event.response != null) {
// 單次信息
setState(() {
_resString += '${event.response}\n';
});
// 信號(hào)強(qiáng)度
_signalStrength = calculateSignalStrength(
event.response?.time?.inMilliseconds ?? 0);
}
// 總計(jì)
if (event.summary != null) {
setState(() {
_resString += '\n${event.summary}\n';
});
}
}
});
}信號(hào)強(qiáng)度
// 信號(hào)強(qiáng)度 0 ~ 5 , 5 最好,0 最差
int calculateSignalStrength(int pingDelay) {
if (pingDelay < 0) {
// 無(wú)網(wǎng)絡(luò)連接
return 0;
} else if (pingDelay < 100) {
// 延遲 < 100ms,信號(hào)強(qiáng)度為 5
return 5;
} else if (pingDelay < 200) {
// 延遲 < 200ms,信號(hào)強(qiáng)度為 4
return 4;
} else if (pingDelay < 300) {
// 延遲 < 300ms,信號(hào)強(qiáng)度為 3
return 3;
} else if (pingDelay < 500) {
// 延遲 < 500ms,信號(hào)強(qiáng)度為 2
return 2;
} else {
// 延遲 >= 500ms,信號(hào)強(qiáng)度為 1
return 1;
}
}視圖
Widget _mainView() {
return Center(
child: Column(
children: [
ElevatedButton(
onPressed: _doPing,
child: const Text('Start Ping'),
),
Text('信號(hào)強(qiáng)度: $_signalStrength'),
Text(_resString),
],
),
);
}@override
Widget build(BuildContext context) {
return Scaffold(
appBar: AppBar(
title: const Text('Ping'),
),
body: _mainView(),
);
}第三步:用圖片顯示信號(hào)強(qiáng)度
信號(hào)圖片
// 信號(hào)強(qiáng)度圖片
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),
...
],
),
);
}小結(jié)
總之,Ping 工具是一種簡(jiǎn)單而有效的網(wǎng)絡(luò)工具,可以幫助用戶測(cè)試網(wǎng)絡(luò)連通性和性能,及時(shí)發(fā)現(xiàn)和解決網(wǎng)絡(luò)問題。請(qǐng)?jiān)诰W(wǎng)路應(yīng)用 Flutter 中開啟這個(gè)功能~
以上就是Flutter Ping 檢查服務(wù)器通訊信號(hào)強(qiáng)度的詳細(xì)內(nèi)容,更多關(guān)于Flutter Ping服務(wù)器通訊信號(hào)的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
相關(guān)文章
Android實(shí)現(xiàn)橡皮筋回彈和平移縮放效果
這篇文章主要為大家詳細(xì)介紹了Android實(shí)現(xiàn)橡皮筋回彈和平移縮放效果,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-04-04
Android中定時(shí)執(zhí)行任務(wù)的3種實(shí)現(xiàn)方法(推薦)
下面小編就為大家?guī)?lái)一篇Android中定時(shí)執(zhí)行任務(wù)的3種實(shí)現(xiàn)方法(推薦)。小編覺得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧2016-11-11
android Activity線性布局和表格布局實(shí)例講解
在activity的布局中,線性布局和表格布局是最簡(jiǎn)單的,這次分別從線性布局,表格布局以及線性布局和表格混合布局做了實(shí)驗(yàn)2013-11-11
RecyclerView實(shí)現(xiàn)側(cè)滑拖拽功能
這篇文章主要為大家詳細(xì)介紹了RecyclerView實(shí)現(xiàn)側(cè)滑拖拽功能,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-07-07
Android Flutter實(shí)現(xiàn)3D動(dòng)畫效果示例詳解
在Flutter中提供了AnimatedWidget組件用于構(gòu)建可復(fù)用的動(dòng)畫組件。本文我們用AnimatedWidget來(lái)實(shí)現(xiàn)組件的3D旋轉(zhuǎn)效果,感興趣的可以了解一下2022-03-03

