1
0

feat: 添加 UDP 客户端模块

This commit is contained in:
2025-06-11 09:36:27 +08:00
parent b85459cec0
commit cb3e2cc0ce
2 changed files with 107 additions and 0 deletions

View File

@@ -14,6 +14,10 @@ import {
initTrayItems,
} from './tray';
import {
initUdpClient,
} from './udp-client';
import icon from '../../resources/icon.png?asset';
import process from 'process';
@@ -71,6 +75,7 @@ app.whenReady().then(() => {
createWindow();
initTrayItems();
initUdpClient();
app.on('activate', function () {
// On macOS it's common to re-create a window in the app when the

102
src/main/udp-client.js Normal file
View File

@@ -0,0 +1,102 @@
import { createSocket } from 'dgram';
/** 模块名称 */
const MODULE_NAME = '[udp-client]';
/**
* @desc Socket 对象
* @type { import('dgram').Socket }
*/
let instance = null;
/** 初始化 UDP 客户端 */
export function initUdpClient() {
// 创建对象
instance = createSocket('udp4');
// 监听事件:异常
instance.on('error', function (error) {
console.error('-'.repeat(32));
console.error(MODULE_NAME, '出现异常:');
console.error(String(error));
console.error('-'.repeat(32));
});
// 监听事件:端口监听
instance.on('listening', function () {
let info = instance.address();
console.info(MODULE_NAME, `端口监听成功,地址 ${info.address},端口 ${info.port}`);
});
// 监听事件:消息
instance.on('message', function (message, remote) {
let { address: rAddress, port: rPort } = remote;
let msgStr = String(message);
console.info('-'.repeat(32));
console.info(MODULE_NAME, `收到消息 | 地址:${rAddress} | 端口:${rPort}`);
console.info(msgStr);
console.info('-'.repeat(32));
});
// 绑定端口,初始化
instance.bind(0, function () {
try {
instance.setBroadcast(false);
instance.setMulticastTTL(128);
// instance.addMembership('');
// instance.setMulticastInterface('');
} catch (error) {
console.error(MODULE_NAME, '更新配置失败:');
console.error(error);
}
});
}
/**
* @description 发送消息ASCII
* @param {object} options
* @param {string} options.data 消息内容
* @param {string} options.ip 目标地址
* @param {number} options.port 目标端口
*/
export function sendMessage(options = {}) {
try {
if (!instance) {
console.error(MODULE_NAME, '消息发送失败:未初始化');
return;
}
let { data, ip, port } = options;
let buffer = Buffer.from(data, 'ascii');
console.info('-'.repeat(32));
console.info(MODULE_NAME, `发送消息 | 地址:${ip} | 端口:${port}`);
console.info(data);
console.info('-'.repeat(32));
// 发送消息
instance.send(buffer, port, ip, (error) => {
if (error) {
console.error('-'.repeat(32));
console.error(MODULE_NAME, '消息发送失败:');
console.error(String(error));
console.error('-'.repeat(32));
}
});
} catch (error) {
console.error('-'.repeat(32));
console.error(MODULE_NAME, '消息发送异常:');
console.error(String(error));
console.error('-'.repeat(32));
}
}