首页 > 其他分享 >测试网络延迟 工具类

测试网络延迟 工具类

时间:2024-11-12 15:30:59浏览次数:1  
标签:latency java System 网络 host 测试 import port 延迟

 

import java.io.IOException;
import java.net.InetAddress;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.Executors;
import java.util.concurrent.ScheduledExecutorService;
import java.util.concurrent.TimeUnit;

public class NetworkLatencyTester {

    public static List<Long> integerIsReachableList = new ArrayList<>();
    public static List<Long> integerTCPList = new ArrayList<>();
    private final String host;
    private final int port;
    private final long interval;
    private final ScheduledExecutorService scheduler;

    public NetworkLatencyTester(String host, int port, long interval) {
        this.host = host;
        this.port = port;
        this.interval = interval;
        this.scheduler = Executors.newSingleThreadScheduledExecutor();
    }

    public void start() {
        scheduler.scheduleAtFixedRate(this::testLatency, 0, interval, TimeUnit.SECONDS);
    }

    public void stop() {
        scheduler.shutdown();
    }

    private void testLatency() {
        try {
            // 使用 InetAddress 测试 ICMP 延迟
            long startTime = System.currentTimeMillis();
            boolean reachable = InetAddress.getByName(host).isReachable(5000); // 超时时间为 5 秒
            long endTime = System.currentTimeMillis();
            long latency = endTime - startTime;

            if (reachable) {
                System.out.println("Host " + host + " is reachable. Latency: " + latency + " ms");
                integerIsReachableList.add(latency);
            } else {
                System.out.println("Host " + host + " is not reachable.");
            }

            // 使用 Socket 测试 TCP 延迟
            startTime = System.currentTimeMillis();
            try (Socket socket = new Socket(host, port)) {
                endTime = System.currentTimeMillis();
                latency = endTime - startTime;
                integerTCPList.add(latency);
                System.out.println("TCP connection to " + host + ":" + port + " successful. Latency: " + latency + " ms");
            } catch (IOException e) {
                endTime = System.currentTimeMillis();
                latency = endTime - startTime;
                System.out.println("TCP connection to " + host + ":" + port + " failed. Latency: " + latency + " ms");
            }

        } catch (IOException e) {
            System.err.println("Error testing latency: " + e.getMessage());
        }
    }

    public static void main(String[] args) {
        String host = "xx.xx.xx.xx"; // 替换为你要测试的IP或主机名
        int port = 8000; // 替换为你要测试的端口
        long interval = 5; // 测试间隔时间,单位为秒

        NetworkLatencyTester tester = new NetworkLatencyTester(host, port, interval);
        tester.start();

        // 为了防止程序立即退出,可以添加一个休眠时间
        try {
            Thread.sleep(123 * 1000); // 休眠 120 秒
        } catch (InterruptedException e) {
            e.printStackTrace();
        }

        tester.stop();

        // 计算 integerIsReachableList 的平均值
        double averageIsReachableLatency = calculateAverage(integerIsReachableList);
        System.out.println("Average ICMP Latency: " + averageIsReachableLatency + " ms");

        // 计算 integerTCPList 的平均值
        double averageTCPLatency = calculateAverage(integerTCPList);
        System.out.println("Average TCP Latency: " + averageTCPLatency + " ms");
    }

    private static double calculateAverage(List<Long> list) {
        if (list.isEmpty()) {
            return 0.0;
        }
        long sum = 0;
        for (Long latency : list) {
            sum += latency;
        }
        return (double) sum / list.size();
    }
}

  

标签:latency,java,System,网络,host,测试,import,port,延迟
From: https://www.cnblogs.com/uoky/p/18542004

相关文章

  • 自动驾驶仿真:软件在环(SIL)测试详解(精简版入门)
    自动驾驶仿真:软件在环(SIL)测试详解一、引言自动驾驶技术的快速发展对测试验证提出了更高要求。软件在环(Software-in-the-Loop,简称SIL)仿真测试作为自动驾驶系统验证的重要手段,通过将自动驾驶的控制软件与虚拟仿真平台结合,实现对自动驾驶系统的软件功能、稳定性和安全性的全面测......
  • 2024最新版漏洞挖掘教程,零基础入门到精通, 收藏这篇就够了_网络安全挖洞全流程保姆级
    经常有小伙伴问我。为什么自己总是挖不到漏洞呢?渗透到底是什么样的流程呢?所以全网最详细的渗透测试流程来了!!!全篇文章内容较长,请耐心观看!渗透测试渗透测试其实就是通过一些手段来找到网站,APP,网络服务,软件,服务器等网络设备和应用的漏洞,告诉管理员有哪些漏洞,怎么......
  • 网络安全领域的 16 个专业,零基础入门到精通,收藏这一篇就够了_数字取证
    ......
  • 网络安全从零开始学习CTF——CTF基本概念
    这一系列把自己学习的CTF的过程详细写出来,方便大家学习时可以参考。一、CTF简介01」简介中文一般译作夺旗赛(对大部分新手也可以叫签到赛),在网络安全领域中指的是网络安全技术人员之间进行技术竞技的一种比赛形式。CTF起源于1996年DEFCON全球黑客大会,以代替之前黑客们通过互......
  • 网络安全与CTF学习信息汇总
    http://www.sec-wiki.com/skill/安全技能(里面渗透逆向编程都有介绍)http://blog.knownsec.com/Knownsec_RD_Checklist/知道创宇研发技能表v3.0**********************************************************综合学习平台:http://edu.gooann.com/谷安网校http://www.jike......
  • 【24年新算法故障诊断】基于FVIM-DBN四向量优化深度置信网络的故障诊断(Matlab代码,评估
    本文采用四向量优化算法(FVIM,2024年新算法)优化深度置信网络DBN的超参数,形成FVIM-DBN故障诊断模型,以进一步提升其在数据分类任务中的性能。深度置信网络(DBN)是经典强大的深度神经网络,是一种具有多个隐藏层的前馈深度神经网络。它由若干堆叠的受限玻尔兹曼机(RestrictedBolt......
  • 新手入门Java自动化测试的利器:Selenium WebDriver
    新手入门Java自动化测试的利器:SeleniumWebDriver今天我们将深入探讨一款强大的Java自动化测试工具——SeleniumWebDriver。在正式介绍SeleniumWebDriver之前,让我们首先对Selenium本身进行简要概述,以便更好地理解其背景和功能。官方学习网站:https://www.selenium.dev/Sele......
  • 网络安全2024就业前景如何?找工作容易吗?
    众所周知,网络安全与我们息息相关,无论是企业还是个人都应该重视网络安全。而网络安全作为一个新兴行业,人才需求量远大于供给,因此在薪资福利上具有很大的优势,但对于初学者而言,很多人依然担心前景问题,那么网络安全就业前景如何?本文将为大家介绍一下。从目前市场情况来讲,网络......
  • ssm毕设休闲网络宾馆管理程序+论文+部署
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容一、研究背景随着互联网技术的迅猛发展,休闲旅游市场日益繁荣,休闲网络宾馆作为旅游住宿领域的新兴力量,正逐渐改变着人们的出行住宿体验。在当下,消费者对于住宿......
  • 代码静态测试工具Klocwork 2024.3新版发布:Validate平台改进编码标准CC++
    Klocwork2024.3为C/C++分析引擎和构建上传流程引入了新功能和性能改进。此版本还附带了增强的安全性和用户体验改进,包括用于SAML/OIDC身份验证的IDE插件中更好的用户身份验证工作流程。其他增强功能包括更广泛的编码标准覆盖范围以及改进的与Bazel构建系统的集成。Vali......