怎么用javascript实现ping一个主机代码
发布时间:2017-08-25, 15:01:16 分类:HTML | 编辑 off 网址 | 辅助
正文 446字数 381,081阅读
仅测试是否能够连接,不算pingfunction ping(ip){
var img = new Image();
var start = new Date().getTime();
img.src = "http://" + ip +"?t="+start;
var flag = false;
img.onload = function(){
flag = true;
console.log('ok');
}
var timer = setTimeout(function(){
if(!flag){
flag = false;
console.log('failed');
}
},1500);
}
ping('192.168.1.106');
Run code
Cut to clipboard
(支付宝)给作者钱财以资鼓励 (微信)→
标签: ping1
有过 3 条评论 »
,只能用 图片url,直接域名不行的
<!DOCTYPE html> <html> <head> <meta charset="utf-8" /> <title>HTTP Ping</title> <style> html { height: 100%; overflow: hidden; } body { background: #000; color: #C0C0C0; font: bold 14px 'Lucida Console'; height: 100%; margin: 0 0 0 5px; } #divContent { height: 90%; overflow: auto; } #txtTimeout { width: 40px; } button { margin-left: 10px; } </style> </head> <body> <div id="divInput"> <span>Host:</span> <input id="txtURL" type="text" /> <span>Timeout:</span> <input id="txtTimeout" type="text" value="2000" /> <input id="btnSwitch" type="button" value="Start" onclick="handleClick()" /> <hr/> </div> <div id="divContent"></div> <script> var iSeq = 0; var iSent, iReply; var iSum, iMax, iMin; var sURL, iTimeout; var bRunning = false; var tick, tid; function reply() { if(!bRunning || this.seq != iSeq) return; /* * 取消超时计时 */ clearTimeout(tid); ++iReply; var delay = new Date - tick; iSum += delay; if(delay > iMax) iMax = delay; if(delay < iMin) iMin = delay; println("Reply from " + sURL + " time" + ((delay<1)? ("<1") : ("="+delay)) + "ms"); tid = setTimeout(ping, Math.max(1000-delay, 1000)); } function ping() { tick = +new Date; ++iSent; tid = setTimeout(timeout, iTimeout); var oImg = new Image; oImg.onload = reply; oImg.onerror = reply; oImg.seq = ++iSeq; // 发送请求 oImg.src = sURL + "/" + tick + ".html"; } function timeout() { if(!bRunning) return; println("Request timed out."); ping(); } </script> <script> function $(v){return document.getElementById(v)} var oBtn = $("btnSwitch"); var oContent = $("divContent"); var txtURL = $("txtURL"); txtURL.value = location.host; function handleClick() { if(bRunning) { /* * 停止 */ oBtn.value = "Start"; bRunning = false; clearTimeout(tid); /* * 统计结果 */ var lost = iSent - iReply; println(" "); println("Ping statistics for " + sURL + ":"); println(" Packets: Sent = " + iSent + ", Received = " + iReply + ", Lost = " + lost + " (" + Math.round(lost / iSent * 100) + "% loss),"); if(iReply == 0) return; println("Approximate round trip times in milli-seconds:"); println(" Minimum = " + iMin + "ms, Maximum = " + iMax + "ms, Average = " + Math.round(iSum / iReply) + "ms"); } else { /* * 开始 */ sURL = txtURL.value; if(sURL.length == 0) return; if(sURL.substring(0,7).toLowerCase() != "http://") sURL = "http://" + sURL; iTimeout = parseInt($("txtTimeout").value, 10); if(isNaN(iTimeout)) iTimeout = 2000; if(iTimeout < 1000) iTimeout = 1000; oBtn.value = "Stop "; bRunning = true; iSent = 0; iReply = 0; iSum = 0; iMax = -1; iMin = 1e9; cls(); println("Pinging " + sURL + ":"); println(" "); ping(); } } function println(str) { var div = document.createElement("div"); if(div.innerText != null) div.innerText = str; else div.textContent = str; oContent.appendChild(div); oContent.scrollTop = oContent.scrollHeight; } function cls() { oContent.innerHTML = ""; } </script> </body> </html>
$fp=fopen("cs.txt","w"); for($i=0;$i<170400;$i++){ fwrite($fp,"test"); } fclose($fp); //计算网速 function getmicrotime() { list($usec,$sec) = explode("",microtime()); return ((float)($usec) + (float)($sec)); } $data = file_get_contents("cs.txt"); $start = getmicrotime(); $filesize = filesize("cs.txt") / 1024; echo "<!--".$data."-->"; $stop = getmicrotime(); $duration = ($stop - $start); $speed = round($filesize/$duration,2); echo "你的网速:$speed kB/秒";
目前项目需要用到,实现原理很简单,提交一个ajax请求,并分别记录发送时间和收到回复时间即可。
$.ping = function(option) { var ping, requestTime, responseTime ; var getUrl = function(url){ //保证url带http:// var strReg="^((https|http)?://){1}" var re=new RegExp(strReg); return re.test(url)?url:"http://"+url; } $.ajax({ url: getUrl(option.url)+'/'+ (new Date()).getTime() + '.html', //设置一个空的ajax请求 type: 'GET', dataType: 'html', timeout: 10000, beforeSend : function() { if(option.beforePing) option.beforePing(); requestTime = new Date().getTime(); }, complete : function() { responseTime = new Date().getTime(); ping = Math.abs(requestTime - responseTime); if(option.afterPing) option.afterPing(ping); } }); if(option.interval && option.interval > 0) { var interval = option.interval * 1000; setTimeout(function(){$.ping(option)}, interval); // option.interval = 0; // 阻止多重循环 // setInterval(function(){$.ping(option)}, interval); } };