Node.js dgram模块实现UDP通信示例代码

2020-06-17 06:56:07易采站长站整理

console.log(`receive message from ${rinfo.address}:${rinfo.port}`);
server.send('exit',rinfo.port,rinfo.address)
});

server.bind('8060');

客户端:


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

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

client.on('error',(err)=>{
console.log(err);
});
client.on('message',(msg,rinfo)=>{
if(msg=='exit') client.close();
console.log(`receive message from ${rinfo.address}:${rinfo.port}`);
});
client.send(`hello`,8060,'1.1.1.69');

3、UDP广播实现

要实现UDP广播,就必须知道广播地址,广播地址如何计算呢?可以利用ipconfig(windows)或ifconfig(*unix)得到ip地址和mask掩码地址,然后利用ip地址与mask子网掩码做与操作得到网络地址,网络地址中主机位都为1就是广播地址,举个例子:

IP:149.88.160.58
mask:11111111.11111111.11000000.00000000
IP&MASK得到网络地址:149.88.128.0/18
网络号就是主机位全为0,即149.88.10000000.00000000 即149.88.128.0
广播地址就是主机位全为1,即149.88.10111111.11111111即149.88.191.255

接着实现UDP广播,我机子的IP为1.1.1.69,掩码为255.255.255.0,因此广播地址为1.1.1.255,服务端向广播地址的8061端口发送数据报,客户端绑定本机的8061端口,如下所示:

服务端:


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

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

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

server.on('listening',()=>{
console.log('socket正在监听中...');
server.setBroadcast(!0);//开启广播
server.setTTL(128);
server.send('大家好啊,我是服务端.',8061,'1.1.1.255');
});

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

server.bind('8060','1.1.1.69');

客户端:


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

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

client.on('error',(err)=>{
console.log(err);
});
client.on('listening',()=>{
console.log('socket正在监听中...');
});
client.on('message',(msg,rinfo)=>{
console.log(`receive message from ${rinfo.address}:${rinfo.port}:${msg}`);
});
client.bind(8061,'1.1.1.69');

3、UDP组播实现

组播地址是实现UDP组播的关键,因此了解组播地址是重点。什么是组播地址?IANA将D类地址(224.0.0.0-239.255.255.255)分配给IP组播,用来标识一个IP组播组,由IGMP(组管理协议)协议维护组成员关系,其中: