jquery的ping插件://要用的需要明白代码及自己改些地方

(function($) {
    $.fn.ping = function(options) {
        var opts = $.extend({}, $.fn.ping.defaults, options);
        var stime = new Date().getTime(); 
        return this.each(function() {
            var ping, requestTime, responseTime ;
            var target = $(this);
            function ping(){
                $.ajax({url: opts.getUrl(target.html())+'/'+ Math.random() + '.html',  //设置一个空的ajax请求
                    type: opts.type,
                    dataType: 'html',
                    timeout: opts.timeout,
                    beforeSend : function() {
                        requestTime = new Date().getTime();
                    },
                    complete : function() {
                        responseTime = new Date().getTime();
                        ping = Math.abs(requestTime - responseTime);
                        $('#'+target.html().replace('.','_')).text(ping + opts.unit);
                        //target.text(ping + opts.unit);
                    }
                });
            }
            var etime = new Date().getTime();
            if(Math.abs(stime - etime)<opts.timeout){
                ping();  //无论如何都要执行一次
                opts.interval != 0 && setInterval(ping,opts.interval * 1000);
            }
        });
    };
    $.fn.ping.defaults = {
        type: 'GET',
        timeout: 10000,
        interval: 3,
        unit: 'ms',
        isUrl:function(url){    //验证url是否有效
           var strReg = "^((https|http)?://)?" 
            + "(([0-9]{1,3}.){3}[0-9]{1,3}" // 
            + "|" // 
            + "([0-9a-z_!~*'()-]+.)*" // 
            + "([0-9a-z][0-9a-z-]{0,61})?[0-9a-z]." // 
            + "[a-z]{2,6})" // 
            + "(:[0-9]{1,4})?" // 
            + "((/?)|" // 
            + "(/[0-9a-z_!~*'().;?:@&=+$,%#-]+)+/?)$"; 
            var re=new RegExp(strReg); 
            return re.test(url);
           },
        getUrl:function(url){    //保证url带http://
            var strReg="^((https|http)?://){1}"
            var re=new RegExp(strReg); 
            return re.test(url)?url:"http://"+url;
        }
    };
})(jQuery);

js ping url:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>HTTP Ping</title>
<style>
html{height: 100%;overflow: hidden;}
body{background: #000;color: #C0C0C0;font-weight: bold;font-size: 14px;font-family: Lucida Console;height: 100%;margin: 0 0 0 5px;}
#divInput{height: 10%;}
#divContent{height: 90%;overflow: auto;}
#txtTimeout{width: 40px;}
button{    margin-left: 10px;}
</style>
</head>
<body>
<div id="divInput">
    <span>URL:</span>
    <input id="txtURL" type="text" />
    <span>Timeout:</span>
    <input id="txtTimeout" type="text" value="2000" />
    <input id="btnSwitch" type="button" value="Start" onclick="handleBtnClick()" />
    <hr/>
</div>
<div id="divContent"></div>
<script>
var intStartTime;
var objIMG = new Image();
objIMG.onload =
objIMG.onerror = 
function(){
    /*
     * 有回应,取消超时计时
     */
    clearTimeout(intTimerID);
    if(!bolIsRunning || bolIsTimeout)
        return;
    var delay = new Date() - intStartTime;
    println("Reply from " +
            strURL +
            " time" +
            ((delay<1)?("<1"):("="+delay)) +
            "ms");
    arrDelays.push(delay);
    /*
     * 每次请求间隔限制在1秒以上
     */
    setTimeout(ping, delay<1000?(1000-delay):1000);
}
function ping(){
    /*
     * 发送请求
     */
    intStartTime = +new Date();
    intSent++;
    objIMG.src = strURL + "/" + intStartTime;
    bolIsTimeout = false;
    /*
     * 超时计时
     */
    intTimerID = setTimeout(timeout, intTimeout);
}
function timeout(){
    if(!bolIsRunning)
        return;
    bolIsTimeout = true;
    objIMG.src = "X:\\";
    println("Request timed out.");
    ping();
}
</script>
<script>
var $ = function(v){return document.getElementById(v)};
var arrDelays = [];
var intSent;
var bolIsRunning = false;
var bolIsTimeout;
var strURL;
var intTimeout;
var intTimerID;
var objBtn = $("btnSwitch");
var objContent = $("divContent");
var objTxtURL = $("txtURL");
objTxtURL.value = window.location.host;
function handleBtnClick(){
    if(bolIsRunning){
        /*
         * 停止
         */
        var intRecv = arrDelays.length;
        var intLost = intSent-intRecv;
        var sum = 0;
        for(var i=0; i<intRecv; i++)
            sum += arrDelays[i];
        objBtn.value = "Start";
        bolIsRunning = false;
        /*
         * 统计结果
         */
        println(" ");
        println("Ping statistics for " + strURL + ":");
        println("  Packets: Sent = " +
                intSent +
                ", Received = " +
                intRecv +
                ", Lost = " +
                intLost +
                " (" +
                Math.floor(intLost / intSent * 100) +
                "% loss),");
        if(intRecv == 0)
            return;
        println("Approximate round trip times in milli-seconds:");
        println("  Minimum = " +
                Math.min.apply(this, arrDelays) +
                "ms, Maximum = " +
                Math.max.apply(this, arrDelays) +
                "ms, Average = " +
                Math.floor(sum/intRecv) +
                "ms");
    }else{
        /*
         * 开始
         */
        strURL = objTxtURL.value;
        if(strURL.length == 0)
            return;
        if(strURL.substring(0,7).toLowerCase() != "http://")
            strURL = "http://" + strURL;
        intTimeout = parseInt($("txtTimeout").value, 10);
        if(isNaN(intTimeout))
            intTimeout = 2000;
        if(intTimeout < 1000)
            intTimeout = 1000;
        objBtn.value = "Stop ";
        bolIsRunning = true;
        arrDelays = [];
        intSent = 0;
        cls();
        println("Pinging " + strURL + ":");
        println(" ");
        ping();
    }
}
function println(str){
    var objDIV = document.createElement("div");
    if(objDIV.innerText != null)
        objDIV.innerText = str;
    else
        objDIV.textContent = str;
    objContent.appendChild(objDIV);
    objContent.scrollTop = objContent.scrollHeight;
}
function cls(){
    objContent.innerHTML = "";
}
</script>
</body>
</html>

用jquery实现Ping测试网络连接性的更多相关文章

  1. shell 使用ping测试网络

    能ping通返回1,不能返回0 ping -c 192.168.1.1 | grep '0 received' | wc -l

  2. ping测试网络

    https://jingyan.baidu.com/article/ac6a9a5e109d5f2b653eacbc.html 百度百科:https://baike.baidu.com/item/pi ...

  3. (转)用C#实现实现简单的 Ping 的功能,用于测试网络是否已经连通

    本文转载自:http://blog.csdn.net/xiamin/archive/2009/02/14/3889696.aspx 用C#实现实现简单的 Ping 的功能,用于测试网络是否已经联通 1 ...

  4. Fedora 24 Gnome Boxes 无法ping通网络

    安装Fedora 24在试用虚拟机时发现无法ping通外网. 我傻傻地以为是软件问题. 问题描述: 尝试ping程序来测试网络连通性: (我之前也是ping百度,后来在为了少打字百度了一些比较短的域名 ...

  5. Android IOS WebRTC 音视频开发总结(五六)-- 如何测试网络性能?

    本文主要介绍如何测试网络性能,文章来自博客园RTC.Blacker,欢迎关注微信公众号blacker,更多详见www.rtc.help 网络性能直接决定了视频通话效果,比如qq,很多时候我们我们觉得通 ...

  6. TCP/IP——内外网IP+子网掩码作用+PING(网络总结)

    目录: 1.如何区分内网IP和外网IP? 保留字段 2.子网掩码是起什么作用的? 将DNS和IP异或,表示哪段起作用 3.ping到底起什么作用? ping本地.ping远程 下面针对上面三个问题分别 ...

  7. linux 测试网络url命令

    1.curl 地址 或者 wget url地址 [hxxxx@iZ23vy2msooZ ~]$ curl www.baidu.com<!DOCTYPE html><!--STATUS ...

  8. Android检查设备是否可以访问互联网,判断Internet连接,测试网络请求,解析域名

    安卓SDK提供了ConnectivityManager类,那么我们就可以轻松的获取设备的网络状态以及联网方式等信息. 但是要想知道安卓设备连接的网络能不能访问到Internet,就要费一番周折了. 本 ...

  9. ping(网络诊断工具)

    ping(网络诊断工具) Ping是Windows下的一个命令,在Unix和Linux下也有这个命令.ping也属于一个通信协议,是TCP/IP协议的一部分.利用"ping"命令可 ...

随机推荐

  1. 【转】转载一篇优质的讲解epoll模型的文章

    从事服务端开发,少不了要接触网络编程.Epoll 作为 Linux 下高性能网络服务器的必备技术至关重要,Nginx.Redis.Skynet 和大部分游戏服务器都使用到这一多路复用技术. Epoll ...

  2. python进程池 使用Queue实现计数功能

    多进程中各个进程间相互隔离,进程间通信需要使用到通道. 多进程中使用Queue实现进程中通信 from multiprocessing import Process,Queue import time ...

  3. 【LOJ】#3051. 「十二省联考 2019」皮配

    LOJ#3051. 「十二省联考 2019」皮配 当时我在考场上觉得这题很不可做... 当然,出了考场后再做,我还是没发现学校和城市是可以分开的,导致我还是不会 事实上,若一个城市投靠了某个阵营,学校 ...

  4. c# 金钱大写转小写工具类

    using System; using System.Collections.Generic; using System.Linq; using System.Text; using System.T ...

  5. fiddler笔记:Composer选项卡

    1.Composer选项卡介绍 Composer选项卡功能是可以手动构建和发送HTTP.HTTPS和FTP请求. 支持将Web Session列表中选中的Session拖入Composer选项卡,然后 ...

  6. 操作系统diy-1-资料整理

    已经研三了,前段时间校招找了份内核开发的工作,正好有时间做这个以前一直想做的事情.听说写操作系统要花很多时间了解学习计算机方方面面的知识,之前也查过相关的资料,关注过mit的操作系统公开课程.这几天准 ...

  7. 深度学习之卷积神经网络CNN及tensorflow代码实现示例

    深度学习之卷积神经网络CNN及tensorflow代码实现示例 2017年05月01日 13:28:21 cxmscb 阅读数 151413更多 分类专栏: 机器学习 深度学习 机器学习   版权声明 ...

  8. Java 抽象类详解

    在<Java中的抽象方法和接口>中,介绍了抽象方法与接口,以及做了简单的比较. 这里我想详细探讨下抽象类. 一.抽象类的定义 被关键字“abstract”修饰的类,为抽象类.(而且,abx ...

  9. 第二讲,NT头文件格式,以及文件头格式

    今天详解NT 头格式,以及文件头格式,以及作用, 关于DOS头文件格式,以及DOSStub昨天的博客已经写过了.主要是分散讲解.便于理解. 一丶最小PE的生成,以及标准PE的生成 ps: (如果直接学 ...

  10. springboot application.properties配置大全

    springboot application.properties配置大全 官方文档 https://docs.spring.io/spring-boot/docs/current/reference ...