Browse Source

feat: 添加网络判断方法

master
WIN-87ES3P38OPV\EDY 1 week ago
parent
commit
6042eaa863
  1. 9
      main.js
  2. 67
      preload.js

9
main.js

@ -8,11 +8,18 @@ @@ -8,11 +8,18 @@
* @Version: 1.0.0
*/
const { app, BrowserWindow } = require('electron')
const path = require('path')
const createWindow = () => {
const win = new BrowserWindow({
width: 800,
height: 600
height: 600,
webPreferences: {
preload: path.join(__dirname, 'preload.js'),
contextIsolation: true,
nodeIntegration: false,
sandbox: false
}
})
win.loadFile('./dist/index.html')

67
preload.js

@ -0,0 +1,67 @@ @@ -0,0 +1,67 @@
/*
* @Author: 李皓 hao_li_work@163.com
* @Date: 2026-07-28 16:31:45
* @LastEditors: 李皓 hao_li_work@163.com
* @LastEditTime: 2026-07-28 16:44:07
* @FilePath: \pc\preload.js
* @Description:
* @Version: 1.0.0
*/
const { contextBridge } = require('electron')
const nodeNet = require('net')
const dns = require('dns')
/**
* 尝试通过 TCP 连接指定端口检测主机是否可达
*/
function tryConnect(host, port, timeout) {
return new Promise((resolve) => {
const socket = new nodeNet.Socket()
socket.setTimeout(timeout)
socket.on('connect', () => { socket.destroy(); resolve(true) })
socket.on('error', () => { socket.destroy(); resolve(false) })
socket.on('timeout', () => { socket.destroy(); resolve(false) })
socket.connect(port, host)
})
}
/**
* 网络检测对象
*/
const networkUtil = {
/**
* 检测目标主机网络连通性
* @param {string} host - 目标主机地址
* @param {number} timeout - 超时时间毫秒
* @returns {Promise<boolean>} - 是否可达
*/
async ping(host, timeout) {
// 1. 先检查 DNS 能否解析
try {
await dns.promises.resolve(host)
} catch {
return false
}
// 2. 依次尝试常见端口(443 优先,80 兜底)
const ports = [443, 80]
for (const port of ports) {
const ok = await tryConnect(host, port, timeout)
if (ok) return true
}
return false
}
}
/**
* 应用传感器对象
*/
const appSensor = {
version: '1.0.0',
name: 'appSensor'
}
// 安全暴露 API 给渲染进程(挂载到 window.net,页面中可用 net.ping() 调用)
contextBridge.exposeInMainWorld('net', networkUtil)
contextBridge.exposeInMainWorld('appSensor', appSensor)
Loading…
Cancel
Save