当前位置: 首页 > news >正文

Android 解析ping回复包

目标:
已知多个字符串,形如:“64 bytes from 39.156.66.18: icmp_seq=1 ttl=50 time=29.7 ms”
获取 总Ping时间(XX:XX:XX格式),最小时间,最大时间,平均时间,丢包率,已发送个数,已接收个数
示例程序:

import java.util.regex.Matcher;
import java.util.regex.Pattern;private class PingThread extends Thread {// ...// 使用正则表达式匹配,从ping输出中提取特定值private static final Pattern PING_PATTERN = Pattern.compile("time=(\\d+\\.\\d+) ms");private static final Pattern PACKET_LOSS_PATTERN = Pattern.compile("(\\d+)% packet loss");private static final Pattern PACKETS_SENT_PATTERN = Pattern.compile("(\\d+) packets transmitted");private static final Pattern PACKETS_RECEIVED_PATTERN = Pattern.compile("(\\d+) packets received");@Overridepublic void run() {super.run();// ... int packetsSent = 0;int packetsReceived = 0;float packetLoss = 0.0f;long minPingTime = Long.MAX_VALUE;long maxPingTime = Long.MIN_VALUE;long totalPingTime = 0;try {// ... // 读取标准输入流while ((line = successReader.readLine()) != null) {System.out.println("Message: " + line);  // 在控制台看一下消息Matcher packetLossMatcher = PACKET_LOSS_PATTERN.matcher(line);if (packetLossMatcher.find()) {packetLoss = Float.parseFloat(packetLossMatcher.group(1));}Matcher packetsSentMatcher = PACKETS_SENT_PATTERN.matcher(line);if (packetsSentMatcher.find()) {packetsSent = Integer.parseInt(packetsSentMatcher.group(1));}Matcher packetsReceivedMatcher = PACKETS_RECEIVED_PATTERN.matcher(line);if (packetsReceivedMatcher.find()) {packetsReceived = Integer.parseInt(packetsReceivedMatcher.group(1));}Matcher pingMatcher = PING_PATTERN.matcher(line);while (pingMatcher.find()) {float pingTime = Float.parseFloat(pingMatcher.group(1));totalPingTime += pingTime;minPingTime = Math.min(minPingTime, (long) pingTime);maxPingTime = Math.max(maxPingTime, (long) pingTime);}// ...}// 计算平均Ping时间float avgPingTime = totalPingTime / (float) packetsReceived;// 如果需要可以把ms值转化为 "XX:XX:XX" 格式.// 例如:String formattedMinPingTime = formatTime(minPingTime);String formattedMaxPingTime = formatTime(maxPingTime);String formattedAvgPingTime = formatTime((long) avgPingTime);// ...} catch (IOException | InterruptedException e) {// 处理异常e.printStackTrace();} finally {// ...}}// ms值转换为"XX:XX:XX"格式private String formatTime(long milliseconds) {long seconds = milliseconds / 1000;long minutes = seconds / 60;long hours = minutes / 60;return String.format("%02d:%02d:%02d", hours, minutes % 60, seconds % 60);}
}
http://www.lryc.cn/news/110765.html

相关文章:

  • 在外地ssh远程连接家里ubuntu服务器(Coplar内网穿透)
  • windows创建占用特定端口程序
  • 【uniapp 定位获取详细位置】
  • 后端进阶之路——万字总结Spring Security与数据库集成实践(五)
  • mysql8查看执行sql记录历史,配置开启sql历史日志general_log
  • git 版本控制与合并
  • 【力扣】23. 合并 K 个升序链表 <链表指针、堆排序、分治>
  • 微信小程序真机防盗链referer问题处理
  • SpringBoot集成Redisson实现延迟队列
  • 思想道德与法治
  • vue3登录页面
  • SK5代理与IP代理:网络安全守护者的双重防线
  • 线程间的同步、如何解决线程冲突与死锁
  • 8.4一日总结
  • 【面试】某公司记录一次面试题
  • 215. 数组中的第K个最大元素(快排+大根堆+小根堆)
  • Ubuntu18.04配置ZED_SDK 4.0, 安装Nvidia显卡驱动、cuda12.1
  • 张量Tensor 深度学习
  • 用Rust实现23种设计模式之桥接模式
  • 扩散模型实战(一):基本原理介绍
  • 解决npm ERR! code ERESOLVE -npm ERR! ERESOLVE could not resolve
  • HttpServletRequest和HttpServletResponse的获取与使用
  • css在线代码生成器
  • 在java中如何使用openOffice进行格式转换,word,excel,ppt,pdf互相转换
  • 手机变电脑2023之虚拟电脑droidvm
  • HDFS中的sequence file
  • 【MySQL】检索数据使用数据处理函数
  • 【嵌入式学习笔记】嵌入式入门6——定时器TIMER
  • GD32F103输入捕获
  • [RT-Thread]基于ARTPI的文件系统认识与搭建