Android实时网络质量检测

article/2025/9/26 18:59:22

Android实时质量检测

传送门:

github
csdn

原理

使用ping -n -i %f -c %d %s命令实现网络质量检测,具体参数如下:
-n count 发送 count 指定的 ECHO 数据包数。默认值为 4
-i 生存时间
-c 路由隔离仓标识符

如图ping后返回的最后一行可以看到min/avg/max/stddev,我们主要从avg来判断当前的网络质量
在这里插入图片描述

使用

1. 通过Ping.startSniffer方法开始调用,urls规则可以看Ping里面的getIp方法,从第7位开始到下一个":"截至,获取具体域名来ping

Ping.startSniffer("https://www.baidu.com:");

2. 在startSniffer中需要自己实现回调等方式把PingQuality.getQualityInt(s)获取的网络质量结果抛出

核心代码

使用ping命令获取返回的string,然后解析后获取到avg来判断网络质量。

private static PingResult pingCmd(String address, int count, int interval) {String ip = null;try {ip = getIp(address);} catch (UnknownHostException e) {
//            Log.e(TAG, "parseResult", e);}if (ip == null) {sleepTime = 2000;return new PingResult("", address, "", 0);} else {sleepTime = 200;}String cmd = String.format(Locale.US, "ping -n -i %f -c %d %s", ((double) interval / 1000), count, ip);Process process = null;StringBuilder str = new StringBuilder();BufferedReader reader = null;BufferedReader errorReader = null;try {process = Runtime.getRuntime().exec(cmd);reader = new BufferedReader(new InputStreamReader(process.getInputStream()));String line;errorReader = new BufferedReader(new InputStreamReader(process.getErrorStream()));while ((line = reader.readLine()) != null) {str.append(line).append("\n");}while ((line = errorReader.readLine()) != null) {str.append(line);}} catch (IOException e) {Log.e(TAG, "pingCmd", e);} finally {try {if (reader != null) {reader.close();}if (errorReader != null) {errorReader.close();}if (process != null) {process.destroy();}} catch (Exception e) {Log.e(TAG, "pingCmd", e);}}return new PingResult(str.toString(), address, ip, interval);}
public static class PingResult {public final String result;public final String ip;public final String address;public final int interval;private static final String LAST_LINE_PREFIX = "rtt min/avg/max/mdev = ";private static final String PACKET_WORDS = " packets transmitted";private static final String RECEIVED_WORDS = " received";private static final String LOSS_WORDS = "% packet loss";public int sent;public int packetLoss = -1;public int dropped;public float max;public float min;public float avg;public float stddev;public int count;public int avgNumber;public int lostNumber;PingResult(String result, String address, String ip, int interval) {this.result = result;this.ip = ip;this.interval = interval;this.address = address;parseResult();}static String trimNoneDigital(String s) {if (s == null || s.length() == 0) {return "";}char[] v = s.toCharArray();char[] v2 = new char[v.length];int j = 0;for (char aV : v) {if ((aV >= '0' && aV <= '9') || aV == '.') {v2[j++] = aV;}}return new String(v2, 0, j);}private void parseRttLine(String s) {String s2 = s.substring(LAST_LINE_PREFIX.length(), s.length() - 3);String[] l = s2.split("/");if (l.length != 4) {return;}min = Float.parseFloat(trimNoneDigital(l[0]));avg = Float.parseFloat(trimNoneDigital(l[1]));max = Float.parseFloat(trimNoneDigital(l[2]));stddev = Float.parseFloat(trimNoneDigital(l[3]));}private void parsePacketLine(String s) {String[] l = s.split(",");if (l.length != 4) {return;}if (l[0].length() > PACKET_WORDS.length()) {String s2 = l[0].substring(0, l[0].length() - PACKET_WORDS.length());count = Integer.parseInt(s2);}if (l[1].length() > RECEIVED_WORDS.length()) {String s3 = l[1].substring(0, l[1].length() - RECEIVED_WORDS.length());sent = Integer.parseInt(s3.trim());}if (l[2].length() > LOSS_WORDS.length()) {String s4 = l[2].substring(0, l[2].length() - LOSS_WORDS.length());packetLoss = Integer.parseInt(s4.trim());}dropped = count - sent;}private void parseResult() {String[] rs = result.split("\n");try {for (String s : rs) {if (s.contains(PACKET_WORDS)) {parsePacketLine(s);} else if (s.contains(LAST_LINE_PREFIX)) {parseRttLine(s);}}} catch (Exception e) {Log.e(TAG, "parseResult", e);}}@Overridepublic String toString() {if (avg == 1) {avgNumber = 0;} else if (avg > 1 && avg <= 15) {avgNumber = 1;} else if (avg > 15 && avg <= 55) {avgNumber = 2;} else if (avg > 55 && avg <= 140) {avgNumber = 3;} else if (avg > 140 && avg <= 420) {avgNumber = 4;} else if (avg > 420) {avgNumber = 5;} else {avgNumber = 6;}if (packetLoss == 0) {lostNumber = 0;} else if (packetLoss > 0 && packetLoss <= 2) {lostNumber = 1;} else if (packetLoss > 2 && packetLoss <= 5) {lostNumber = 2;} else if (packetLoss > 5 && packetLoss <= 8) {lostNumber = 3;} else if (packetLoss > 8 && packetLoss <= 13) {lostNumber = 4;} else if (packetLoss > 13) {lostNumber = 5;} else {lostNumber = 6;}Log.e("ping", "avg: " + avg + "  packetLoss: " + packetLoss);if (lostNumber > avgNumber) {return PingQuality.getDescription(lostNumber);} else {return PingQuality.getDescription(avgNumber);}
//            return "Result{" +
//                    "result='" + result + '\'' +
//                    ", ip='" + ip + '\'' +
//                    ", interval=" + interval +
//                    ", lastLinePrefix='" + LAST_LINE_PREFIX + '\'' +
//                    ", packetWords='" + PACKET_WORDS + '\'' +
//                    ", receivedWords='" + RECEIVED_WORDS + '\'' +
//                    ", sent=" + sent +
//                    ", dropped=" + dropped +
//                    ", max=" + max +
//                    ", min=" + min +
//                    ", avg=" + avg +
//                    ", stddev=" + stddev +
//                    ", count=" + count +
//                    ", packetLoss=" + packetLoss +
//                    '}';}}

http://chatgpt.dhexx.cn/article/FTNhReEn.shtml

相关文章

为什么网站总显示服务器不能创建对象,Win7系统下IE网页报错“Automation 服务器不能创建对象”怎么办?...

在Win7系统下使用微软老牌IE浏览器经常出现各种各样的故障&#xff0c;比如当前页面脚本出现错误、网页无法播放视屏、无法加载FLASH播放器等&#xff0c;近日又有用户反馈IE网页报错“Automation 服务器不能创建对象”&#xff0c;据了解&#xff0c;出现这种情况是部分网站脚…

JS 解决IE浏览器出现Automation 服务器不能创建对象

1、Automation 服务器不能创建对象 解决方案&#xff1a; 工具 -> Internet选项 -> 安全 -> 自定义级别->ActiveX控件和插件&#xff08;启用如下ActiveX控件设置&#xff09; 2、IE浏览器上传文件时本地路径变成”C:\fakepath\” 解决方案&#xff1a; 工具 -&…

automation 服务器不能创建对象_高并发服务器逻辑处理瓶颈,如何解决?

高并发服务器逻辑处理瓶颈&#xff0c;如何解决&#xff1f;首先我们先了解什么是并发&#xff01; 并发&#xff0c;在操作系统中&#xff0c;是指一个时间段中有几个程序都处于已启动运行到运行完毕之间&#xff0c;且这几个程序都是在同一个处理机上运行&#xff0c;但任一个…

windows无法新建计算机对象,win10系统ie浏览器提示“Automation 服务器不能创建对象”的办法...

有关win10系统ie浏览器提示“Automation 服务器不能创建对象”的操作方法想必大家有所耳闻。但是能够对win10系统ie浏览器提示“Automation 服务器不能创建对象”进行实际操作的人却不多。其实解决win10系统ie浏览器提示“Automation 服务器不能创建对象”的问题也不是难事&…

Automation 服务器不能创建对象

Automation 服务器不能创建对象 好记性不如烂笔头&#xff0c;重装了N次系统 &#xff0c;终于知道了原因。 用VC6.0 写一个atl com 用IE执行&#xff0c;可以正常调用 &#xff0c;用 hta可以正常调用 。 但是用cscript.exe 就是不能调用 成功&#xff01;&#xff01;&…

【调试环境】Automation服务器不能创建对象 | EvilNum的JavaScript

Win7 IE8 调试的HTML代码错误IE设置&#x1f494;&#x1f494;&#x1f494;注册表&#x1f49c;&#x1f49c;&#x1f49c;CLSID 成功&#x1f4ab;&#x1f4ab;&#x1f4ab;允许阻止的内容安全警告-是允许ActiveX交互F12进行调试停止运行脚本脚本窗口 调试状态 调试的HT…

网页打印服务器无法创建对象,打印问题,小编教你怎么解决automation服务器不能创建对象...

小编其实第一次在遇到“automation服务器不能创建对象”的问题时&#xff0c;是一脸懵的&#xff0c;因为不知道这是什么意思&#xff0c;也不知道怎么解决。后来对于朋友相助&#xff0c;才得以解决&#xff0c;他还教我以后遇到这问题要怎么解决。那么今天小编就将解决的方法…

为什么网站总显示服务器不能创建对象,IE浏览器出现“Automation 服务器不能创建对象”解决教程...

如果你在使用IE浏览器传输文件的时候&#xff0c;出现了“Automation 服务器不能创建对象”情况的话&#xff0c;一般都是因为某些网站脚本和认证不太规范导致的&#xff0c;所以你可以用下面的方法去解决。 1、打开IE浏览器&#xff0c;鼠标点击“工具”菜单&#xff0c;点击后…

电脑上导表显示服务器不能创建对象6,win10系统提示automation服务器不能创建对象的还原办法...

win10系统使用久了&#xff0c;好多网友反馈说win10系统提示automation服务器不能创建对象的问题&#xff0c;非常不方便。有什么办法可以永久解决win10系统提示automation服务器不能创建对象的问题&#xff0c;面对win10系统提示automation服务器不能创建对象的图文步骤非常简…

来自网页的消息服务器不能创建对象,电脑IE浏览器提示“Automation服务器不能创建对象”怎么办...

‍ 不少用户反映说用自己电脑上的IE浏览器上网时&#xff0c;经常会弹出“Automation服务器不能创建对象”的提示&#xff0c;很是烦恼。大家是否也有遇到过此类问题?接下来让系统城小编帮你解决IE浏览器提示“Automation服务器不能创建对象”的提示。 具体方法如下&#xff1…

automation服务器不能创建对象

打开IE浏览器&#xff0c;鼠标点击“工具”菜单&#xff0c;点击后将会带出多个子菜单&#xff0c;如图所示&#xff1a; 在弹出的下拉菜单中&#xff0c;选择“Internet 选项&#xff08;O&#xff09;”选项&#xff0c;选择后系统自动弹出一个名为“Internet 选项”的对话…

电脑显示服务器不能创建对象,Automation服务器不能创建对象

悬赏园豆&#xff1a;20 [已解决问题] 解决于 2007-12-19 09:55 <SCRIPT LANGUAGE"JavaScript"> function AutomateExcel() { // Start Excel and get Application object. var oXL new ActiveXObject("Excel.Application"); // G…

解决IE浏览器的Automation 服务器不能创建对象的问题

这两天在部署项目的时候&#xff0c;我遇到使用IE浏览器报错的问题&#xff0c;导致我无法正常预览效果。 下面是我在使用IE浏览器上传文件的时候&#xff0c;遇到了一个报错“Automation 服务器不能创建对象”的问题。分析的得出的原因是:有些网站的脚本处理和相关认证不是很…

Automation服务器不能创建对象 多种解决方法

方法一: 开始-运行&#xff1a;regsvr32 scrrun.dll 解决&#xff1a;主要是Scripting.FileSystemObject&#xff08;FSO 文本文件读写&#xff09;被关闭了&#xff0c;开启FSO功能即可&#xff0c;在“运行”中执行regsvr32 scrrun.dll。 方法二: 请将以下语句复制到记事本中…

同一局域网下电脑传输文件的方式(超简单!)

在同一个局域网下&#xff0c;怎么才能快速的在两台甚至多台电脑下传输文件&#xff1f;&#xff1f;&#xff1f; 1.首先在想要接收文件的电脑下新建文件夹 右击文件夹–>选择属性 点击共享文件夹 点击共享 此时文件夹已经在局域网里面共享啦&#xff01;&#xff01;&…

在局域网内互传文件的方法

文章目录 用到的工具:飞秋&#xff08;feiQ&#xff09; 使用方法&#xff0c;只需要将两台电脑用一根网线相连&#xff0c;然后在两台电脑上打开飞秋&#xff0c;选中要传的文件&#xff0c;发送给对方&#xff0c;对方确认接收即可。

【电脑使用】电脑之间文件无线互传

文章目录 一、说明二、准备三、共享四、复原五、总结/* 2021.8.7 更新 */六、文件传输网站总结 一般来说&#xff0c;电脑之间想要实现文件交互&#xff0c;一般需要使用媒介&#xff0c;比如U盘、移动硬盘等&#xff0c;但如果文件非常大&#xff0c;通过这种方法就有点麻烦了…

怎么使用局域网传输文件

我们在日常生活中经常会使用到用局域网传输文件&#xff0c;下面我就如何使用局域网传输文件作具体的演示。演示中分别对xp/win7两种类型电脑作了具体的描述。方法是亲自测试的哦&#xff01;不需要使用飞鸽传书等其它软件&#xff0c;只需要两台电脑都在同一个局域网内就可以了…

网上邻居——局域网传输文件

最近因为疫情严重没事干&#xff0c;在家里弄了个局域网消磨时间。 局域网简介&#xff1a; 局域网是指某一区域内由多台计算机互相连通组成的计算机组&#xff0c;局域网自身相对其他网络传输速度更快&#xff0c;性能更稳定&#xff0c;并且是封闭性 局域网在我们平时也有见…