本文介绍如何使用 Node.js 的 dgram 模块构建 UDP 服务端与客户端。通过 createSocket 创建套接字,利用 message 和 listening 事件处理数据收发,并结合 bind 方法指定端口。示例代码展示了完整的 UDP 通信流程,适用于对实时性要求高且可容忍少量丢包的场景。
UDP 简介
UDP 全称为用户数据包协议,与 TCP 同属于网络传输层协议。
与 TCP 不同,UDP 并非面向连接的协议,仅需一个套接字即可与多个 UDP 服务进行通信。
尽管 UDP 提供的信息传输服务较为简单且不可靠,在网络状况不佳时可能出现丢包,但由于其无需建立连接,资源消耗极低,因此常被应用于那些偶尔丢包也不会造成严重后果的场景。
典型的适用场景包括音频视频传输、DNS 服务等。
服务端实现 (server.js)
直接通过实例进行说明:
const dgram = require("dgram");
const server = dgram.createSocket("udp4");
server.on("message", (msg, rinfo) => {
console.log("rinfo.address = " + rinfo.address);
console.log("rinfo.port = " + rinfo.port);
console.log(msg.toString());
});
server.on("listening", () => {
console.log("address:" + server.address().address);
console.log("port:" + server.address().port);
});
server.bind("41234");我们使用 dgram 包的 createSocket 方法来创建一个 UDP 服务,该对象既可用于服务端,也可用于客户端。
接着绑定 listening 事件,当服务启动成功时,该事件将被触发。
随后绑定 message 事件,当有客户端消息发送过来时触发,此时接收到的 message 是一个 buffer 对象。
最后调用 bind 方法,绑定数据传输端口。
客户端实现 (client.js)
直接通过代码展示:
const dgram = require("dgram");
const client = dgram.createSocket("udp4");
client.send("hello, nodejs", 41234, "localhost", (err, bytes) => {
console.error(err);
console.log(bytes);
client.close();
client.on("close", () => {
console.log("close");
});
});客户端调用 send 方法来发送消息,其参数分别代表要发送的信息内容、目标端口、IP 地址以及回调函数。
运行 server.js 和 client.js 进行功能测试。
总结
以上为个人经验,希望能给大家一个参考,也希望大家多多支持本站。