代码细节之前后端Ping检测工具

vue中测试ping的时延和丢包率 显示效果如上图所示,点击开始测试后,会默认测30次连接当前网址,然后根据状态给出时延和丢包结果(平均速度,最大速度,最小速度也可以得出), <template> <div class="speed-test"> <el-dialog title="测试网络环境" :visible.sync="speedOpen" width="30%" :close-o... 阅读详情

前言

在前端有时候需要输入ip,为了提高用户体验我们增加个Ping的检测工具,但是注意这里的Ping实际上是代理Ping,即服务端代理客户端是Ping,因此Ping的结果是基于服务端的网络拓扑来的。

效果

在这里插入图片描述
在这里插入图片描述

前端实现

这里直接写成了组件,

组件使用

  <ping-tool ref="ping" :ip="xxx.ip"/>

组件源码

<template>
    <div class="ping">
        <div v-if="'WAIT' === status">
            <el-link @click='startPing' type="primary">Ping 检测</el-link>
        </div>
        <div v-if="'PING' === status">正在Ping IP:{{this.ip}}<i class="el-icon-loading"/></div>
        <div v-if="'ERROR' === status">IP:{{this.ip}}格式错误
            <el-button @click='startPing' size='mini' type="primary" icon="el-icon-refresh" circle/>
        </div>
        <div v-if="'FINISHED' === status">
            <div v-if="pingResult.pingSuccess === true" style="color:mediumseagreen">
                Ping IP:{{this.pingResult.pingIp}} 成功({{this.pingResult.delay}}ms)
                <el-button @click='startPing' size='mini' type="primary" icon="el-icon-refresh" circle/>
            </div>
            <div v-else style="color:red">
                Ping IP:{{this.pingResult.pingIp}} 失败
                <el-button @click='startPing' size='mini' type="primary" icon="el-icon-refresh" circle/>
            </div>
        </div>
        <el-tooltip class="item" effect="dark" content="Ping的结果仅供参考,因为Ping实际上是服务器完成的,具体还是要依据此ip实际的使用环境评估"
                    placement="left">
            <i style='margin-left: 5px' class="el-icon-warning"/>
        </el-tooltip>
    </div>
</template>

<script>
    import {CommApi} from "../api/api/commApi";

    export default {
        name: "PingTool",
        data() {
            return {
                status: 'WAIT',
                pingResult: {
                    pingIp: '',
                    pingSuccess: false
                }
            }
        },
        props: {
            ip: {
                type: String,
                default: ''
            }
        },
        methods: {
            async startPing() {
                 if (!this.ip || this.ip.length === 0 || !(/^((25[0-5]|2[0-4]\d|[01]?\d\d?)\.){3}(25[0-5]|2[0-4]\d|[01]?\d\d?)$/).test(this.ip)) {
                    this.status = 'ERROR'
                    return
                }
                if(this.status === 'PING'){
                    return
                }
                this.status = 'PING'
                let rep = await CommApi.pingIpCheck(this.ip)
                let data = rep.data
                this.status = 'FINISHED'
                this.pingResult = data
            }
        }
    }
</script>

<style scoped>
    .ping {
        margin: 5px;
        display: flex;
        align-items: center;
    }
</style>

后端代码(JAVA)

利用hutool的网络工具包,但是处理逻辑加强了下,取了ping延迟的平均值,以及重试机制

 	@GetMapping("/pingIpCheck")
    @ResponseBody
    public RestObjectResponse<PingIpResult> pingIpCheck(@RequestParam("ip") String ip) {
        int timeoutCount = 0;
        int allPingTime = 0;
        boolean pingResult;
        for (int i = 0; i < 5; i++) {
            StopWatch time = StopWatch.createStarted();
            boolean result = NetUtil.ping(ip, 2000);
            allPingTime += time.getTime();
            if (!result) {
                timeoutCount++;
            }
            if (timeoutCount >= 3) {
                break;
            }
        }
        if (timeoutCount <= 1) {
            pingResult = true;
        } else {
            pingResult = false;
        }

        PingIpResult result = new PingIpResult();
        result.setPingIp(ip);
        result.setPingSuccess(pingResult);
        if (pingResult) {
            result.setDelay(allPingTime / 5);
        } else {
            result.setDelay(-1);
        }
        return RestObjectResponse.ok(result);
    }

    @Getter
    @Setter
    public static class PingIpResult {
        private boolean pingSuccess;
        private String pingIp;
        private int delay = -1;
    }
计算机网络课设《基于UDP的Ping》 文章目录1. 服务器端代码 PingServer.java2. 服务器端线程代码 ThreadServer.java3. 客户端代码 PingClient.java4. 在运行时可能遇上的问题及其解决方法 1. 服务器端代码 PingServer.java import java.io.IOException; import java.net.DatagramPacket; import java... 阅读详情

相关推荐

网络诊断工具:ping和traceroute的实现细节

用户数据报协议(UDP)是一种简单的无连接协议,广泛用于网络通信。UDP为应用程序提供了一种基本的发送机制,允许数据包在没有任何握手过程或错误校验机制的情况下发送。其主要特点包括:无连接的:在使用UDP发送数据之前,不需要建立连接,这减少了延迟和额外的开销。轻量级头部:UDP头部只有8个字节,远小于TCP的20个字节(或更多),使得头部开销非常小。无顺序保证:不保证数据包的顺序,也不保证数据包的可靠性。无拥塞控制。

weixin_36289742的博客 1154

vue2实现前端ping 后端给的ip地址是否可以ping通

【代码】vue2实现前端ping 后端给的ip地址是否可以ping通。

weixin_43845137的博客 2296

LabVIEW利用编程实现PING功能

LabVIEW利用编程实现PING功能

weixin_44006997的博客 1172

通过vue 实现 ping IP 地址

<!-- *@Description: *@Version:1.0 *@Autor:322829 *@Date:2021-07-1514:26:25 *@FilePath:\vuets_admin\src\views\DataManage\ChartData.vue *@LastEditors:322829 *@LastEditTime:2021-08-1114:49:06 --> <template> <d...

u011155153的专栏 3926

vue-status-page::direct_hit:通过对它们进行ping检查服务的简单light vue项目

状态页面 :direct_hit: 一个简单的vue项目,通过ping服务来检查服务(“)。 项目设置 npm install 配置 您可以在名为文件中添加服务。 对于每个服务,您都有三个参数来指示: 端点:要测试的端点(必需)。 isWebsite:是否为网站(必填)。 port:测试端口(可选)。 { "retryInterval": 30, // in seconds "services": { "Personal website": { "endpoint": "https://aminebioudi.com", "isWebsite": true, "port": 443 }, "Google": { "endpoint": "ht

批量PingTelnet检测工具源码+成品

批量PingTelnet检测工具源码+成品

根据ip判断,网址是否ping通

package test.ping; import java.io.BufferedReader; import java.io.InputStream; import java.io.InputStreamReader; public class testPing { public static void main(String[] args) { // String ip = "htt...

qq_43566496的博客 1835

javascript模拟的Ping效果代码 (Web Ping)

JS虽然发送不了真正Ping的ICMP数据包,但Ping的本质仍然是请求/回复的时间差,HTTP自然可以实现此功能.

wireshark抓ping数据包以及简单分析

相关知识 1.Ping原理 Ping是一句DOS 命令,一般用于检测网络通与不通 ,也叫时延,其值越大,速度越慢 PING (Packet Internet Grope),因特网包探索器,用于测试网络连接量的程序。Ping 发送一个 ICMP 回声请求消息给目的地并报告是否收到所希望的 ICMP 回声应答。 它是用来检查网络是否通畅或者网络连接速度的命令。 作为一个生活在网络上的管理员或 者黑客来说,ping 命令是第一个必须掌握的 DOS 命令,它所利用的原理是这样的:网络上 的机器都有唯一确定的

qq_55857040的博客 2万+

【C 程序设计】实现cmd中的ping效果(完整源码+详细注释+可执行文件)

【C 程序设计】实现cmd中的ping效果(完整源码+详细注释+可执行文件) 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【C 程序设计】实现cmd中的ping效果(完整源码+详细注释+可执行文件) 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【C 程序设计】实现cmd中的ping效果(完整源码+详细注释+可执行文件) 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的学习者,也可作为课程设计、期末大作业。 包含全部项目源码、该项目可以直接作为毕设使用。项目都经过严格调试,确保可以运行! 【C 程序设计】实现cmd中的ping效果(完整源码+详细注释+可执行文件) 【优秀课程设计】主要针对计算机相关专业的正在做毕设的学生和需要项目实战练习的

Halcon手眼标定实战:九点标定法从入门到精通(附完整代码)

本文详细介绍了Halcon环境下九点标定法的完整实现流程,从基础概念到实战技巧,帮助开发者快速掌握手眼标定技术。通过精确采集图像坐标与机械坐标,计算仿射变换矩阵,实现相机与机械臂坐标系的精确映射,适用于工业自动化中的平面定位场景。

v4w5x6的博客 410

Linux实现ICMP PING代码

目录 icmp.h icmp.c 校验和的计算 icmp.h #ifndef __CRTL_CRTL_ICMP_H #define __CRTL_CRTL_ICMP_H 1 #define CRTL_ICMPING(ipv4) crtl_icmp_ping(ipv4, 1, 1, NULL, NULL, NULL, NULL) int crtl_icmp_ping(const...

RToax 836

STM32F407 CanOpen主机实战:对象字典配置与多电机CIA402协议驱动详解

本文详细介绍了基于STM32F407的CanOpen主机开发实战,重点解析了对象字典的配置流程与多电机CIA402协议驱动方法。通过使用objdictedit工具配置SDO和PDO参数,并整合CanFestival协议栈,实现了对多个伺服电机的稳定同步控制。文章提供了从硬件连接到代码调试的完整指南,帮助开发者快速掌握工业现场的多轴运动控制技术。

plant的博客 527

IPv6排障工具之ping6完整过程细节剖析

导语 |关于ping的原理详解,网上可以搜索出很多相关内容,而ping6的详解,则很少看见高质量的文章。希望本文能够让更多朋友了解ping6的原理。通过本文你将了解到什么是ICMPV6...

QcloudCommunity的博客 3223

从Excel到‘一张图’办案:手把手教你用AbutionGraph构建公安经侦知识图谱(含数据建模避坑指南)

本文详细介绍了如何利用AbutionGraph时序图数仓技术,将公安经侦领域的Excel、银行流水等碎片化数据转化为可交互的知识图谱。通过数据清洗、实体关系模型设计、时序数据处理等步骤,实现高效智能分析,提升办案效率。特别包含数据建模避坑指南和实战案例,助力公安金融案件侦破。

weixin_33702545的博客 340

基于MATLAB的Hough变换指针式仪表识别

综上所述,本文介绍了如何使用MATLAB中的Hough变换算法来实现指针式仪表的自动识别和读数。通过图像预处理、Hough变换和直线提取,我们可以准确地检测指针的位置,并进一步进行仪表读数。本文将介绍如何使用MATLAB中的Hough变换算法来实现指针式仪表的自动识别和读数。在指针式仪表识别中,我们可以利用Hough变换来检测仪表盘上的指针。以上是基于MATLAB的Hough变换指针式仪表识别的详细步骤和源代码示例。根据指针在仪表盘上的位置,我们可以进行角度计算或使用其他技术来获取准确的读数。

techDM的博客 462

# 单方面PING的通,我能PING通对方机子,对方机子PING不通我

单方面PING的通,我能PING通对方机子,对方机子PING不通我 (或者对方电脑能PING通对方机子,我电脑PING不通对方电脑) 一般情况下我们第一想到的是WINDOWS自带防火墙导致,可有的时候我们也忽略了一些细节,当IP地址冲突被IP占用不稳定 时断时续,也会假性出现单方面PING通的情况,实际上我们PING通的只不过是被占用的IP地址,而非对方我们默认的主机IP. ...

微云分享 7496

深度学习-176-知识图谱技术之langchain与neo4j的嵌入向量Neo4jVector

使用Neo4jVector将输入的文档向量化,并创建向量索引,然后进行语义检索。

qq_20466211的博客 440

关于ping程序

关于网络编程,知之甚少,linux环境下编程的经验也比较缺乏,于是乎,在百度文库上下载了一个关于ping的程序设计,照着将代码敲打一遍,顺便熟悉某些东东。敲完代码,运行时,发现错误极多,正好也试着学习用GDB调试。下面是一些琐碎的知识点,写写加深印象。 1. 关于ping程序 用于确定本地主机与网络中其它主机的网络通信情况,常使用ping程序。ping程序向指...

peng_weida的专栏 9303

Halcon实例转OpenCVSharp--粘连物体分割与计数(基于距离变换+分水岭算法) (附源码)

本文作者Color Space,文章未经作者允许禁止转载! 本文将介绍OpenCVSharp应用实例--粘连物体分割与计数(基于距离变换+分水岭算法)! 本文使用的OpenCVSharp版本---》v4.5.3。 实现目标:将下图中的硬币分割出来并计算数量。 预期效果图: ...

Color Space的博客 2419

飞牛fnNAS虚拟机标准安装

飞牛NAS是一款基于Debian开发的国产免费NAS系统,支持x86架构设备,可将闲置硬件改造为NAS服务器。系统安装简便,支持多种存储模式与硬盘休眠功能,具备智能影视管理、照片备份等实用功能,并提供多种远程访问方式。飞牛NAS还支持Docker扩展,目前已承诺永久免费。文章详细介绍了在VMware虚拟机中安装飞牛NAS的步骤,包括下载镜像、创建虚拟机、初始化设置等过程,并展示了创建共享文件夹等基本操作,帮助用户快速上手这款功能强大的免费NAS系统。

dgnankai的专栏 3254

Ping的代码

这是以前自己写的Ping代码, 以ICMP协议为基础ICMP协议参考: http://baike.baidu.com/view/30564.htm-------------------------------------------------------------------------------------------------------------------------------

635

基于STM32、HAL库的MCP4013T-103E/CH 数字电位器驱动程序设计

define MCP4013_I2C_ADDR (0x5F << 1) // HAL库使用7位地址左移1位,或直接使用0xBE/0xBF。#include "i2c.h" // 包含你的I2C初始化相关的头文件,例如由CubeMX生成的 i2c.h。大于127的值会被截断。// MCP4013的读操作:主机发起读取请求,从机返回当前滑片位置的一个字节。// 使用HAL_I2C_Master_Transmit直接发送数据。// 使用HAL_I2C_Master_Receive读取一个字节。

corlin6688的博客 126

ping个包大概linux,为什么ping对方ip会返回重复回应包呢?

ping同一个序号的ICMP包却收到了多个回应:root@test:/var/www/db# ping mail.corp.qihoo.netPING mail.corp.qihoo.net (220.181.158.203) 56(84) bytes of data.64 bytes from 220.181.158.203: icmp_req=1 ttl=114 time=158 ms64 b...

weixin_39827585的博客 3264

VC中sqlite的使用

在VC中对sqlite的使用,实现数据库大批数据的快速插入,读取数据库中的数据在ListCtrl中显示

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

linux ping.c实验,linux c ping 实现

1 #include 2 #include 3 #include 4 #include 5 #include 6 #include 7 #include 8 #include 9 #include 10 #include 11 #include 12 #include 13 #include 14 #define PACKET_SIZE 409615 #define MAX_WAIT_TI...

weixin_28520495的博客 399

汉书HE8,好用的汇编代码编写工具

汉书HE8,好用的汇编代码编写工具早期编写汇编代码所用功能强大

ping命令的实现

这些天在学习windows网络编程,昨天看到了探测网络中的在线设备,其中刚好有一个实现ping命令的实例,就照着 拍了下代码,结果老是超时,后来到网上问才知道少了计算检验和,于是网上找了下关于检验和的知识。 校验和计算:    为了计算一份数据报的校验和码。首先把校验和字段置为0。然后,对首部中每一个16bit进行二进制反码求和,结果存在校验和字段中。当受

5156

文档:亲测可用解决vnc灰屏,黑屏,鼠标大黑叉情况

主要解决vnc-viewer灰屏,黑屏,鼠标大黑叉等现象,详细见文档。

上一篇: 利用浏览器插件生成TAPD的更新日志
下一篇: git导出不同版本的差异代码
mt23
博客等级 码龄12年 33粉丝 91原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值