node.js基于dgram数据报模块创建UDP服务器和客户端操作示例

2020-06-17 08:01:23易采站长站整理

server.bind(8888, '192.168.1.102', function () {
//启用广播
server.setBroadcast(true);
server.setTTL(128);
});
server.on('message', function (msg, rinfo) {
console.log(msg.toString());
console.log(rinfo);
});
let buf = Buffer.from('广播数据');
setInterval(function () {
//向广播IP发送数据
//注意客户端监听的端口要与这里的端口一致,不然无法接收到广播
server.send(buf, 0, buf.length, 6666, '192.168.1.255', function (error, bytes) {
if (error) {
console.log(error);
}
console.log(`发送 ${bytes} 个字节数据`);
});
}, 3000);

客户端:


const dgram = require('dgram');
let client = dgram.createSocket('udp4');
//如果监听不到广播数据,设置成 0.0.0.0 看看
client.bind(6666, '192.168.1.111');
client.on('message', function (msg, rinfo) {
console.log(msg.toString());
});

三、通过UDP进行组播

组播就是将网络中的主机进行逻辑上的分组,向一个组播地址发送数据,该组下的所有主机都会收到数据。

实现组播,并不是直接把数据发送给目标地址,而是将数据发送给组播主机,然后分发给组内的所有成员。

在网络中,使用D类地址作为组播地址,范围是 224.0.0.0 – 239.255.255.255。

分为四类:

1、224.0.0.0 ~ 224.0.0.255 地址224.0.0.0保留不做分配,其它供路由协议使用。

2、224.0.1.0 ~ 224.0.1.255 公用组播地址,可以用于Internet。

3、224.0.2.0 ~ 238.255.255.255 为用户可用的组播地址(临时组地址),全网范围内有效。

4、239.0.0.0 ~ 239.255.255.255 为本地管理组播地址,仅在特定的本地范围内有效。

通过 addMembership() 将 socket 加入组播中,dropMembership() 方法退出组播。

服务端:


const dgram = require('dgram');
//组播地址
const multicastAddr = '224.1.1.1';
let server = dgram.createSocket('udp4');
//注意setMulticastLoopback()要在绑定成功后设置
server.bind(8888, '192.168.1.102', function () {
//设置数据包的生存时间
server.setMulticastTTL(128);
//将socket加入组播组中
server.addMembership(multicastAddr);
//开启组播
server.setMulticastLoopback(true);
});
server.on('message', function (msg, rinfo) {
console.log(msg.toString());
});
let buf = Buffer.from('组播数据');
setInterval(function () {
//向组播IP发送数据
//注意,客户端监听的端口要与这里一致
server.send(buf, 0, buf.length, 6666, multicastAddr, function (error, bytes) {
console.log(`发送 ${bytes} 字节数据`);
});
}, 3000);

客户端: