nodejs dgram模块广播+组播的实现示例

下面就为大家详细介绍如何使用nodejs的dgram模块进行广播和组播的实现,包括示例说明。

什么是dgram模块?

dgram 提供了实现 UDP 数据包 socket 的方式,它是 Node.js 标准库的一部分,用于处理网络数据通信。

广播和组播的概念

广播是指向同一广播网络内的所有网络设备传输消息的过程。广播的特点是传送迅速,但由于是向所有设备广播,因此受到安全限制,一般只用于内网数据传输。

组播(或多播)是指向指定组内的所有网络设备传输消息的过程。组播的特点是传送可控,只向需要的设备传送数据,同时也具有广播的速度。在 Internet 环境下,组播协议是 IPv4 和 IPv6 协议中重要的协议。

广播的实现示例

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

const PORT = 33333;

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.on('listening', () => {
  const address = server.address();
  console.log(`server listening ${address.address}:${address.port}`);
});

server.bind(PORT);

const client = dgram.createSocket('udp4');
client.bind(() => {
  client.setBroadcast(true);
  const message = Buffer.from('Hello World!');
  client.send(message, PORT, '255.255.255.255', (err) => {
    console.log(`Broadcast message "${message}"`);
    client.close();
  });
});

首先,我们创建了一个udp4协议的socket服务器,监听33333端口。当有客户端发送消息到这个端口时,服务器会触发message事件,然后我们将消息打印出来。如果接下来要发送广播消息,那么客户端和服务端要分别创建一个socket,client端需要先调用setBroadcast(true)方法告知udp套接字可以发送广播消息,然后构建一个待发送的消息缓存区(message buffer),然后通过send方法,指定目标端口和广播地址,发送消息。

组播的实现示例

const dgram = require('dgram');
const server = dgram.createSocket({type: 'udp4', reuseAddr: true});

const HOST = '239.1.2.3';
const PORT = 33333;

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

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

server.on('message', (message, remote) => {
  console.log(`Receive message from ${remote.address}:${remote.port}: ${message}`);
});

server.bind(PORT, () => {
  server.addMembership(HOST);
});

const client = dgram.createSocket({type: 'udp4', reuseAddr: true});

client.on('error', (err) => {
  console.log(`client error:\n${err.stack}`);
  client.close();
});

client.on('listening', () => {
  client.setMulticastTTL(64);
  client.setBroadcast(true);
  client.setMulticastLoopback(true);
  console.log(`client listening on ${client.address().address}:${client.address().port}`);
});

client.bind(PORT, () => {
  client.addMembership(HOST);
});

client.send('Hello World!', PORT, HOST, (err) => {
  if (err) {
    console.log(`client send failed: ${err}`);
  } else {
    console.log('message sent');
    client.close();
  }
});

组播的实现相对于广播更加灵活,需要指定组播的IP地址和端口。上面的代码中,我们创建了一个udp4协议的socket服务器,同时创建了一个客户端socket,首先在服务端的listening事件上调用addMembership方法,将服务器加入到指定的组播地址中。在客户端的listening事件上,调用了addMembership方法加入到组播地址中。客户端还需要调用setMulticastTTL方法设置分组发送等级,setBroadcast方法告诉套接字可以发送广播消息,并通过setMulticastLoopback设置组播消息是否只发送给当前机器。之后,在客户端调用send方法即可发送组播消息。

希望以上内容可以对您有所帮助。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:nodejs dgram模块广播+组播的实现示例 - Python技术站

(0)
上一篇 2023年6月8日
下一篇 2023年6月8日

相关文章

  • NodeJS和浏览器中this关键字的不同之处

    NodeJS和浏览器中的JavaScript在使用this关键字时有着一些区别。下面我们将从以下两个方面进行详细讲解。 1. this在NodeJS中的指向 在NodeJS中,this指向的是当前执行上下文中的对象。在全局上下文中,this关键字指向的是global对象。在函数内部,this指向的是运行时函数所属的对象。当函数作为对象方法被调用时,this指…

    node js 2023年6月8日
    00
  • Solaris新手必读-121个问题解答

    让我对“Solaris新手必读-121个问题解答”这个攻略进行详细讲解。 Solaris新手必读-121个问题解答 简介 该攻略是针对Solaris新手的一份完整文档,通过回答121个常见问题,让用户能够轻松地入门并掌握Solaris操作系统。本攻略包含多种问题,包括文件系统管理、网络配置、安装和升级、用户和组管理、安全等多个方面。用户可以通过该攻略更好地理…

    node js 2023年6月8日
    00
  • node删除、复制文件或文件夹示例代码

    下面是针对Node.js删除、复制文件或文件夹的完整攻略。 删除文件或文件夹 删除单个文件 使用fs.unlink()可以删除单个文件,示例代码如下: const fs = require(‘fs’); fs.unlink(‘/path/to/file’, (err) => { if (err) throw err; console.log(‘文件已经…

    node js 2023年6月8日
    00
  • nodejs切换版本使用最新教程(不需要卸载重装)

    下面是针对“nodejs切换版本使用最新教程(不需要卸载重装)”的完整攻略,包含以下内容: 1. 确认环境 在开始更改Node.js版本之前,请确保您的计算机已安装Node.js。您可以打开终端应用程序并键入以下命令来查看安装的版本: node -v 2. 安装n模块 接下来,我们需要安装“n”,这是一个简单的命令行工具,可以帮助我们快速地切换Node.js…

    node js 2023年6月7日
    00
  • Node.js中,在cmd界面,进入退出Node.js运行环境的方法

    以下是进入和退出 Node.js 运行环境的方法: 进入 Node.js 运行环境 打开命令提示符窗口(Windows系统按Win + R,输入cmd,回车即可),输入 node 或 node -i 命令并回车,即可进入 Node.js 运行环境。 示例1: C:\>node Welcome to Node.js v14.16.0. Type &quo…

    node js 2023年6月8日
    00
  • Node中的Events模块介绍及应用

    Node中的Events模块介绍及应用 1. 什么是Events模块 Events模块是Node中处理系统或应用程序中发生的事件的核心 Events模块大量应用于基于事件驱动的异步系统中,如网络编程、用户输入等场景 Events模块提供了一个事件触发与事件监听的能力,能够实现事件的发布/订阅、消息队列等开发 2. Events模块主要API on(event…

    node js 2023年6月8日
    00
  • node.JS的crypto加密模块使用方法详解(MD5,AES,Hmac,Diffie-Hellman加密)

    Node.js是基于V8 JavaScript引擎建立的服务器端应用程序,可以使用许多内置模块和第三方模块。其中加密模块非常常用和重要,提供了各种加密算法。本文将详细介绍Node.js crypto加密模块的使用方法,包括MD5、AES、Hmac、Diffie-Hellman加密,为想要了解Node.js加密的用户提供帮助。 1. 加载crypto模块 要使…

    node js 2023年6月8日
    00
  • JavaScript中ES6 Babel正确安装过程

    当我们想要在JavaScript中使用ES6语法的时候,我们会发现当前的浏览器对ES6的支持并不完善,为了解决这个问题,我们可以使用Babel来将我们编写的ES6代码转换为可运行的ES5代码。 下面是JavaScript中ES6 Babel正确安装过程的完整攻略: 步骤一:安装Node.js 在使用Babel之前,需要先安装Node.js。Node.js是运…

    node js 2023年6月8日
    00
合作推广
合作推广
分享本页
返回顶部