You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何用Node.js实现UDP单播客户端/服务器模型?与多播差异何在?

Node.js UDP单播与多播的差异及单播实现

核心差异对比

  • 通信模式:单播是严格的一对一通信,数据仅从发送端传递给指定的单个接收端;多播是一对多,发送端把数据发往多播组地址,所有加入该组的接收端都能收到。
  • 地址使用:单播用普通的IPv4/IPv6单播地址(比如局域网内的192.168.1.100);多播使用专属的地址段(IPv4是224.0.0.0-239.255.255.255,IPv6是ff00::/8)。
  • 接收端逻辑:多播接收端必须调用addMembership()加入指定多播组才能接收数据;单播接收端只需要绑定自己的端口/地址,无需额外操作。
  • 发送目标:单播发送时必须明确指定接收端的具体IP和端口;多播发送的目标是多播组地址,不需要知道每个接收端的具体地址。

Node.js UDP单播实现(与多播代码差异很小)

单播的代码结构和多播基本一致,核心差异仅在于发送目标的指定和接收端是否需要加入多播组。

单播服务器(接收端)

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

// 错误处理
server.on('error', (err) => {
  console.log(`服务器错误:\n${err.stack}`);
  server.close();
});

// 接收消息并回复
server.on('message', (msg, rinfo) => {
  console.log(`收到来自 ${rinfo.address}:${rinfo.port} 的消息: ${msg}`);
  // 直接回复给发送端的IP和端口
  server.send('已收到你的消息', rinfo.port, rinfo.address, (err) => {
    if (err) console.error('回复失败:', err);
  });
});

// 监听状态
server.on('listening', () => {
  const addr = server.address();
  console.log(`服务器监听 ${addr.address}:${addr.port}`);
});

// 绑定端口即可,无需加入多播组
server.bind(41234);

单播客户端(发送端)

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

const sendMsg = Buffer.from('Hello 单播服务器');
// 必须指定服务器的具体IP和端口
client.send(sendMsg, 41234, '127.0.0.1', (err) => {
  if (err) console.error('发送失败:', err);
});

// 接收服务器的回复
client.on('message', (msg, rinfo) => {
  console.log(`收到服务器回复: ${msg}`);
  client.close();
});

和多播代码的关键差异点

  1. 服务器端:多播服务器需要额外调用server.addMembership('多播地址')加入组,单播服务器不需要这一步。
  2. 客户端发送:多播客户端发送时目标是多播组地址(比如224.0.0.100),单播客户端必须指定接收端的真实IP。
  3. 地址绑定:多播接收端通常绑定到0.0.0.0以监听所有网卡,单播接收端可以绑定到特定网卡地址或0.0.0.0,逻辑一致。

内容的提问来源于stack exchange,提问作者Christophe Thomas

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 18:54:54