feat: 添加 UDP 客户端模块
This commit is contained in:
@@ -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
102
src/main/udp-client.js
Normal 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));
|
||||
}
|
||||
|
||||
}
|
Reference in New Issue
Block a user