当前位置: 首页 > news >正文

Node.js 创建 UDP 服务

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

1. 基本使用

1.1. 创建 UDP 套接字

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

1.2. 绑定到端口

socket.bind(41234);  // 绑定到端口号 41234

1.3. 发送消息

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. 接收消息

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

1.5. 关闭套接字

socket.close();  // 关闭 UDP 套接字

1.6. 错误处理

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

2. 完整的 UDP 示例

2.1. UDP 服务器

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 客户端

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 查询。

http://www.dtcms.com/a/389005.html

相关文章:

  • 【NodeJS 二维码】node.js 怎样读取二维码信息?
  • IRN论文阅读笔记
  • pacote:Node.js 生态中的包获取工具
  • 使用 Ansible 管理 Docker 容器:开关机、定时开关机及 VNC 控制
  • 【Spring AI】实现一个基于 Streamable HTTP 的 MCP Server
  • 云手机:概念、历史、内容与发展战略
  • linux服务器上安装oss对象存储(命令行工具使用oss)
  • 强化学习1.1 使用Gymnasium库
  • 日语学习-日语知识点小记-进阶-JLPT-N1阶段蓝宝书,共120语法(11):101-110语法 +(考え方15)
  • 运维分享:神卓 N600 如何实现 NAS 安全稳定访问
  • 系统集成项目管理工程师:第十四章 收尾过程组
  • 云手机通道具体是指什么?
  • C++ :实现多线程编程
  • 嵌入式科普(40)浅谈“功能安全“概念,深悟“功能安全“本质
  • 分布式系统理论-CAP和BASE
  • SaaS 安全的原则、挑战及其最佳实践指南
  • Flink on Native K8S源码解析
  • VMwarea安装
  • HarmonyOS之Swiper全解析
  • React18中性能优化方式
  • X133核心板--智能教育平板的芯动力​
  • 下载flink和flink cdc jar
  • 华为三层交换技术
  • 潮起之江:算力创新与赋能开启AI产业新征程
  • 华为链路聚合技术基础
  • 百度智能云车牌识别API官方配置指南
  • Git 拉Github的仓库却要求登录GitLab
  • 【Kafka】Kafka如何开启sasl认证?
  • 国产化Excel开发组件Spire.XLS教程:C# 轻松将 DataSet 导出到 Excel
  • NLP情绪因子解构鲍威尔“风险管理降息”信号,黄金价格在3707高位触发量化抛售潮