Node.js 创建 UDP 服务

dgram 模块是 Node.js 中用于提供 UDP 套接字的模块。它支持通过用户数据报协议 (UDP) 进行通信。UDP 是一种无连接的协议,因此不像 TCP 那样需要建立和维护连接,适用于低延迟、不需要确保可靠传输的场景。

1. 基本使用

1.1. 创建 UDP 套接字

javascript 复制代码
const dgram = require('dgram');
const socket = dgram.createSocket('udp4');  // 创建一个 UDP4 (IPv4) 的套接字,或者用 'udp6' 来支持IPv 6

1.2. 绑定到端口

javascript 复制代码
socket.bind(41234);  // 绑定到端口号 41234

1.3. 发送消息

javascript 复制代码
const message = Buffer.from('Hello UDP!');
socket.send(message, 0, message.length, 41234, 'localhost', (err) => {
    if (err) console.error(err);
    else console.log('Message sent!');
});

1.4. 接收消息

javascript 复制代码
socket.on('message', (msg, rinfo) => {
    console.log(`Received message: ${msg} from ${rinfo.address}:${rinfo.port}`);
});

1.5. 关闭套接字

javascript 复制代码
socket.close();  // 关闭 UDP 套接字

1.6. 错误处理

javascript 复制代码
socket.on('error', (err) => {
    console.error(`Socket error: ${err}`);
    socket.close();
});

2. 完整的 UDP 示例

2.1. UDP 服务器

javascript 复制代码
const dgram = require('dgram');
const server = dgram.createSocket('udp4');

server.on('error', (err) => {
    console.log(`Server error: ${err}`);
    server.close();
});

server.on('message', (msg, rinfo) => {
    console.log(`Server got: ${msg} from ${rinfo.address}:${rinfo.port}`);
});

server.on('listening', () => {
    const address = server.address();
    console.log(`Server listening on ${address.address}:${address.port}`);
});

server.bind(41234);  // 监听 41234 端口

2.2. UDP 客户端

javascript 复制代码
const dgram = require('dgram');
const client = dgram.createSocket('udp4');

const message = Buffer.from('Hello, Server!');
client.send(message, 41234, 'localhost', (err) => {
    client.close();
});

3. 常用事件

  • message:当接收到消息时触发。

  • error:当套接字发生错误时触发。

  • listening:当服务器成功绑定并开始监听时触发。

  • close:当套接字关闭时触发。

4. 适用场景

  • 网络广播。

  • 轻量级、低延迟通信,如实时游戏或流媒体。

  • 对可靠性要求不高的数据传输,如 DNS 查询。

相关推荐
TechPioneer_lp6 天前
大厂校招面经-快手后端开发
面经·后端开发·面试准备·校招准备·快手校招
Javatutouhouduan6 天前
深入学习JVM底层原理:JVM源码剖析与实例详解
java·jvm·java虚拟机·java面试·后端开发·java程序员·java性能优化
Java爱好狂.7 天前
Redis高级笔记:原理+集群+应用+拓展+源码
java·数据库·redis·spring·java面试·后端开发·java八股文
TechPioneer_lp8 天前
大厂校招面经-滴滴后端开发(最新)
面经·后端开发·大厂校招·滴滴校招·滴滴面试
TechPioneer_lp9 天前
大厂校招面经-哔哩哔哩(B站)后端开发
校园招聘·b站·面经·后端开发·大厂面经·哔哩哔哩·校招攻略
TechPioneer_lp9 天前
大厂校招面经-京东后端开发
面经·后端开发·面试准备·大厂校招·校招准备·笔试准备·京东校招
Byte不洛9 天前
理解C++异常机制:栈展开、异常传播与异常安全
c++·异常处理·后端开发·编程基础·try catch
TechPioneer_lp9 天前
大厂校招面经-蚂蚁集团后端开发
后端开发·大厂面经·秋招准备·校招准备·蚂蚁校招
天若有情6739 天前
【开源推荐】form-validator-cn 轻量级中文表单校验库 | TS 零依赖、极简开箱即用
前端·npm·开源·node·js·表单校验
TechPioneer_lp9 天前
大厂校招面经-阿里巴巴后端开发(最新)
阿里巴巴·后端开发·大厂面经·秋招准备·校招准备