日期:2014-05-16  浏览次数:20439 次

JavaScript实现ping
<!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 = "h