前端检测是否可ping通ip地址(PC端)
// 前端检测是否可ping通ip地址
pingFn(ips) {
let promiseArr = [];
ips.forEach(ip=>{
// debugger
let pro = new Promise((res, rej)=>{
let img = new Image();
let start = new Date().getTime();
img.src = 'https://' + ip + '?t=' + start;
img.onload = function() {
res({code:200,status: true,ip});
};
img.onerror = function() {
res({code:200,status: true,ip});
};
let timer = setTimeout(()=>{
clearTimeout(timer);
rej();
}, 1500);
}).catch((e) => {});
promiseArr.push(pro);
});
return Promise.any(promiseArr);
},
前端检测是否可ping通ip地址(uniapp小程序端)
// 前端检测是否可ping通ip地址
pingFn(ips) {
let promiseArr = [];
ips.forEach(ip=>{
let pro = new Promise((res, rej)=>{
let start = new Date().getTime();
let url = 'https://' + ip + '?t=' + start;
uni.getImageInfo({
src: url,
success: function (image) {
res({code:200,status: true,ip});
},
fail:function(err){
res({code:200,status: true,ip});
}
});
let timer = setTimeout(()=>{
clearTimeout(timer);
rej();
}, 1500);
}).catch((e) => {});
promiseArr.push(pro);
});
return Promise.any(promiseArr);
},
async getData() {
let a = await this.pingFn(['192.168.0.12','192.168.0.13']);
// console.log('检测是否能ping通内网地址====',a)
if(a){
// 如果有返回值,则可以ping通
}else{
// 无返回值会返回undefined
}
// 根据返回值执行自己的后续操作
}
首先实现的是PC端功能,后粘贴到小程序里,发现实现不了,代码一行行定位后发现在new Image()那一步就已经走不下去了,后百度发现脚本不支持Image对象,将写法改一下即可。
参考文档:
1、vue2实现前端ping 后端给的ip地址是否可以ping通【https://blog.csdn.net/weixin_43845137/article/details/130371232】
2、uni-app在脚本中不支持Image对象?【https://ask.dcloud.net.cn/question/76390】文章来源地址https://www.toymoban.com/news/detail-643762.html
文章来源:https://www.toymoban.com/news/detail-643762.html
到了这里,关于检测前端是否可以ping通后端返回的ip地址的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!