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


Posted in NodeJs onNovember 04, 2019

本机IP地址是10.8.93.80,

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

具体信息如上图所示

根据计算得知我的广播地址应该是10.8.93.255,不是10.8.93.254哦。

其它内容就直接上代码

server.js

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

server.on('close', () => {
 console.log('socket已关闭');
});

server.on('error', (err) => {
 console.log(err);
});

server.on('listening', () => {
 console.log('socket正在监听中...');
 server.addMembership(multicastAddr); // 不写也行
 server.setBroadcast(true);
 server.setMulticastTTL(128);
 setInterval(() => {
  sendMsg();
 }, 1500);
});

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

function sendMsg() {
 console.log('sending');
 server.send('大家好啊,我是服务端广播消息', 8061, '10.8.93.255');
 server.send('大家好啊,我是服务端组播消息', 8061, multicastAddr);
}

server.bind('8060'); // 此处填写IP后无法组播

client.js

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

client.on('close', () => {
 console.log('socket已关闭');
});

client.on('error', (err) => {
 console.log(err);
});
client.on('listening', () => {
 console.log('socket正在监听中...');
 client.addMembership(multicastAddr);
});
client.on('message', (msg, rinfo) => {
 console.log(`receive server message from ${rinfo.address}:${rinfo.port}:${msg}`);
});
client.bind(8061); // 此处必须绑定自己的局域网IP或者不填,填localhost是不行的

代码中我的服务器是绑定的8060端口,向广播地址的8061端口发送广播,故意改成不一样的是为了本机的客户端也能够接收试试,不然不就端口占用了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

NodeJs 相关文章推荐
NodeJS url验证(url-valid)的使用方法
Nov 18 NodeJs
使用nodejs、Python写的一个简易HTTP静态文件服务器
Jul 18 NodeJs
深入浅析NodeJs并发异步的回调处理
Dec 21 NodeJs
浅谈Nodejs应用主文件index.js
Aug 28 NodeJs
浅谈Nodejs中的作用域问题
Dec 26 NodeJs
nodejs中向HTTP响应传送进程的输出
Mar 19 NodeJs
深入nodejs中流(stream)的理解
Mar 27 NodeJs
详解nodeJS之路径PATH模块
May 31 NodeJs
nodejs基于express实现文件上传的方法
Mar 19 NodeJs
nodejs搭建本地服务器轻松解决跨域问题
Mar 21 NodeJs
nodejs中函数的调用实例详解
Oct 31 NodeJs
NodeJs内存占用过高的排查实战记录
May 10 NodeJs
Nodejs实现图片上传、压缩预览、定时删除功能
Oct 25 #NodeJs
nodejs语言实现验证码生成功能的示例代码
Oct 13 #NodeJs
NodeJS有难度的面试题(能答对几个)
Oct 09 #NodeJs
Nodejs监控事件循环异常示例详解
Sep 22 #NodeJs
详解利用nodejs对本地json文件进行增删改查
Sep 20 #NodeJs
nodejs实现聊天机器人功能
Sep 19 #NodeJs
图解NodeJS实现登录注册功能
Sep 16 #NodeJs
You might like
咖啡与牛奶
2021/03/03 冲泡冲煮
js刷新框架子页面的七种方法代码
2008/11/20 Javascript
让你的网站可编辑的实现js代码
2009/10/19 Javascript
轻轻松松学JS调试(不下载任何工具)
2010/04/14 Javascript
70+漂亮且极具亲和力的导航菜单设计国外网站推荐
2011/09/20 Javascript
javascript中[]和{}对象使用介绍
2013/03/20 Javascript
jquery实现动态菜单的实例代码
2013/11/28 Javascript
jQuery表格插件ParamQuery简单使用方法示例
2013/12/05 Javascript
JavaScript运行机制之事件循环(Event Loop)详解
2014/10/10 Javascript
innerHTML动态添加html代码和脚本兼容多个浏览器
2014/10/11 Javascript
js获取内联样式的方法
2015/01/27 Javascript
7个让JavaScript变得更好的注意事项
2015/01/28 Javascript
JS数组array元素的添加和删除方法代码实例
2015/06/01 Javascript
javascript中JSON.parse()与eval()解析json的区别
2016/05/19 Javascript
JS中的进制转换以及作用
2016/06/26 Javascript
JavaScript浏览器对象模型BOM(BrowserObjectModel)实例详解
2016/11/29 Javascript
bootstrap表单按回车会自动刷新页面的解决办法
2017/03/08 Javascript
手把手教你把nodejs部署到linux上跑出hello world
2017/06/19 NodeJs
基于JavaScript中字符串的match与replace方法(详解)
2017/12/04 Javascript
vue-cli webpack模板项目搭建及打包时路径问题的解决方法
2018/02/26 Javascript
vue实例中data使用return包裹的方法
2018/08/27 Javascript
Vue2.x中利用@font-size引入字体图标报错的解决方法
2018/09/28 Javascript
4 种滚动吸顶实现方式的比较
2019/04/09 Javascript
React如何实现浏览器打印部分内容详析
2019/05/19 Javascript
[53:21]2014 DOTA2国际邀请赛中国区预选赛5.21 DT VS LGD-CDEC
2014/05/22 DOTA
python实现简单中文词频统计示例
2017/11/08 Python
快速了解Python相对导入
2018/01/12 Python
详解Python3 基本数据类型
2019/04/19 Python
对Django中static(静态)文件详解以及{% static %}标签的使用方法
2019/07/28 Python
关于pandas的离散化,面元划分详解
2019/11/22 Python
Jupyter Notebook远程登录及密码设置操作
2020/04/10 Python
Django ORM实现按天获取数据去重求和例子
2020/05/18 Python
tensorflow转换ckpt为savermodel模型的实现
2020/05/25 Python
如何卸载python插件
2020/07/08 Python
Python使用Pygame绘制时钟
2020/11/29 Python
自我评价是什么
2014/01/04 职场文书