JAVA获取上下行网速
2021/11/29 11:06:38
本文主要是介绍JAVA获取上下行网速,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!
JAVA获取上下行网速
package com.iecas.zwterminalstate.util; import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.util.Formatter; import java.util.HashMap; import java.util.Map; import java.util.Optional; import java.util.Properties; import java.util.StringTokenizer; public class NetWorkUtil { private static final int SLEEP_TIME = 2 * 1000; //获取网络上行下行速度 public static Map<String, String> getNetworkDownUp() { Properties props = System.getProperties(); String os = props.getProperty("os.name").toLowerCase(); os = os.startsWith("win") ? "windows" : "linux"; Map<String, String> result = new HashMap<>(); Process pro = null; Runtime r = Runtime.getRuntime(); BufferedReader input = null; String rxPercent = ""; String txPercent = ""; try { String command = "windows".equals(os) ? "netstat -e" : "ifconfig"; pro = r.exec(command); input = new BufferedReader(new InputStreamReader(pro.getInputStream())); long result1[] = readInLine(input, os); Thread.sleep(SLEEP_TIME); pro.destroy(); input.close(); pro = r.exec(command); input = new BufferedReader(new InputStreamReader(pro.getInputStream())); long result2[] = readInLine(input, os); rxPercent = formatNumber((result2[0] - result1[0]) / (1024.0 * (SLEEP_TIME / 1000))); // 上行速率(kB/s) txPercent = formatNumber((result2[1] - result1[1]) / (1024.0 * (SLEEP_TIME / 1000))); // 下行速率(kB/s) } catch (Exception e) { e.printStackTrace(); } finally { if (input != null) { try { input.close(); } catch (IOException e) { e.printStackTrace(); } } Optional.ofNullable(pro).ifPresent(p -> p.destroy()); } result.put("rxPercent", rxPercent);// 下行速率 result.put("txPercent", txPercent);// 上行速率 return result; } private static long[] readInLine(BufferedReader input, String osType) { long arr[] = new long[2]; StringTokenizer tokenStat = null; try { if (osType.equals("linux")) { // 获取linux环境下的网口上下行速率 long rx = 0, tx = 0; String line = null; //RX packets:4171603 errors:0 dropped:0 overruns:0 frame:0 //TX packets:4171603 errors:0 dropped:0 overruns:0 carrier:0 while ((line = input.readLine()) != null) { if (line.indexOf("RX packets") >= 0) { rx += Long.parseLong(line.substring(line.indexOf("RX packets") + 11, line.indexOf(" ", line.indexOf("RX packets") + 11))); } else if (line.indexOf("TX packets") >= 0) { tx += Long.parseLong(line.substring(line.indexOf("TX packets") + 11, line.indexOf(" ", line.indexOf("TX packets") + 11))); } } arr[0] = rx; arr[1] = tx; } else { // 获取windows环境下的网口上下行速率 input.readLine(); input.readLine(); input.readLine(); input.readLine(); tokenStat = new StringTokenizer(input.readLine()); tokenStat.nextToken(); arr[0] = Long.parseLong(tokenStat.nextToken()); arr[1] = Long.parseLong(tokenStat.nextToken()); } } catch (Exception e) { e.printStackTrace(); } return arr; } private static String formatNumber(double f) { return new Formatter().format("%.2f", f).toString(); } public static void main(String[] args) { Map<String, String> result = getNetworkDownUp(); System.out.println(result.get("rxPercent")); System.out.println(result.get("txPercent")); } }
这篇关于JAVA获取上下行网速的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!
- 2024-06-26结对编程到底难不难?答案在这里
- 2024-06-19《2023版Java工程师》课程升级公告
- 2024-06-15matplotlib作图不显示3D图,怎么办?
- 2024-06-1503-Loki 日志监控
- 2024-06-1504-让LLM理解知识 -Prompt
- 2024-06-05做软件测试需要懂代码吗?
- 2024-06-0514-ShardingSphere的分布式主键实现
- 2024-06-03为什么以及如何要进行架构设计权衡?
- 2024-05-31全网首发第二弹!软考2024年5月《软件设计师》真题+解析+答案!(11-20题)
- 2024-05-31全网首发!软考2024年5月《软件设计师》真题+解析+答案!(21-30题)