Node.js笔记:UDP基础使用

目的

UDP是比较基础常用的网络通讯方式,这篇文章将介绍Node.js中UDP基础使用的一些内容。

本文中使用Node.js版本为v16.17.1,UDP相关官方文档如下:
https://nodejs.org/dist/latest-v16.x/docs/api/dgram.html
本文中使用 Packet Sender 工具进行测试,其官网地址如下:
https://packetsender.com/

作为客户端使用

作为客户端使用主要就是向某个服务器发送消息了,主要就是使用send方法了:

socket.send(msg[, offset, length][, port][, address][, callback])

  • msg <Buffer> | <TypedArray> | <DataView> | <string> | <Array> Message to be sent.
  • offset <integer> Offset in the buffer where the message starts.
  • length <integer> Number of bytes in the message.
  • port <integer> Destination port.
  • address <string> Destination host name or IP address.
  • callback <Function> Called when the message has been sent.

下面是个基本的测试代码:

const dgram = require('node:dgram');
const client = dgram.createSocket('udp4');

 // 发送消息,对方端口号是50280,127.0.0.1是内部回环地址,表示这是发给本机自己的
client.send('naisu233', 50280, '127.0.0.1');

在这里插入图片描述

作为服务器使用

UDP一个比较基础的使用就是作为服务器使用。作为服务器使用时可以监听本机上网卡收到的发送给指定端口号的消息。

作为服务器使用主要就是监听某个端口号,然后处理收到消息时的事件即可。下面是个基本的测试代码:

const dgram = require('node:dgram');
const server = dgram.createSocket('udp4');

// 发生异常时触发
server.on('error', (err) => {
    console.log(`server error:\n${err.stack}`);
    server.close();
});

// 收到消息时触发
server.on('message', (msg, rinfo) => {
    console.log(`server got: ${msg} from ${rinfo.address}:${rinfo.port}`); // 打印收到的消息、对方地址及端口号
    server.send(`you msg is ${msg}`,rinfo.port,rinfo.address) // 向对方发送消息(可选)
});

// 启动监听时触发
server.on('listening', () => {
    const address = server.address();
    console.log(`server listening ${address.address}:${address.port}`); // 打印自身地址和监听端口号
});

server.bind(22333); // 监听本地所有网卡的22333端口号

在这里插入图片描述

可以使用 close 方法关闭Socket并停止监听。

广播

广播主要就是指发送时向内网中所有设备发送消息了,操作上最主要就是发送消息时地址使用 广播地址 ,广播地址计算方式可以参考下面文章:

《UDP IPv4广播地址计算(附Node.js示例代码)》
https://blog.csdn.net/Naisu_kun/article/details/127221349

需要注意的是如果设备上有多个网卡的话就可能有多个广播地址,要全局广播的话就要向每个广播地址分别发送消息。

在Node.js中想使用 本地广播(local broadcast)广播地址为255.255.255.255的广播,需要启用相关功能:

udp.bind(() => {
    udp.setBroadcast(true);
});

总结

UDP的使用比较简单,更多内容可以参考官方文档。

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Naisu Xu

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值