地址范围: 0.0.0.0 ~ 223.255.255.255
直接广播: 会被路由转发,IP地址的网络字段定义这个网络,主机字段通常全为1,如192.168.10.255
Node为我们提供了 dgram模块用于构建UDP服务
使用该模块创建UDP套接字非常简单,UDP套接字一旦创建,即可以作为客户端发送数据,也可以作为服务器接受数据。
const dgram = require('dgram')
const server = dgram.createSocket('udp4')
// 当绑定端口好启动成功后触发
server.on('listening', () => {
const address = server.address()
console.log(`client running ${address.address}: ${address.port}`)
})
// 当收到消息时触发
server.on('message', (msg, remoteInfo) => {
console.log(`来自客户端消息:【${msg}】 from ${remoteInfo.address}: ${remoteInfo.port}`)
server.send('word', remoteInfo.port, remoteInfo.address)
})
// 发生异常触发
server.on('error', err => {
console.log('server error', err)
})
// 绑定端口号
server.bind(20000)
const dgram = require('dgram')
const client = dgram.createSocket('udp4')
// 当绑定端口好启动成功后触发
client.on('listening', () => {
const address = client.address()
console.log(`client running ${address.address}: ${address.port}`)
})
// 发送消息
client.send('hello', 20000, 'localhost')
// 当收到消息时触发
client.on('message', (msg, remoteInfo) => {
console.log(`来自服务端消息:【${msg}】 from ${remoteInfo.address}:${remoteInfo.port}`)
})
// 发生异常触发
client.on('error', err => {
console.log('client error', err)
})
// 绑定端口号
// client.bind(20001)
发送消息:
const dgram = require('dgram')
const server = dgram.createSocket('udp4')
// 当绑定端口好启动成功后触发
server.on('listening', () => {
const info = server.address()
console.log(`server running ${info.address}: ${info.port}`)
// 开启广播模式
server.setBroadcast(true)
// 案例: 每隔两秒发送一条消息
let a = 1
setInterval(() => {
// 直接地址 可以经过路由转发
// 受限地址 255.255.255.255 不会经过路由转发,只在当前连接的路由器局域网中
server.send(`测试数据${a++}`, 20001, '255.255.255.255')
}, 2000)
})
// 绑定端口号
server.bind(20000)
接收消息:
const dgram = require('dgram')
const client = dgram.createSocket('udp4')
// 当收到消息时触发
client.on('message', (msg, remoteInfo) => {
console.log(`收到消息:【${msg}】 from ${remoteInfo.address}:${remoteInfo.port}`)
})
// 绑定端口号
client.bind(20001)
发送数据:
// 组播
const dgram = require('dgram')
const server = dgram.createSocket('udp4')
// 当绑定端口好启动成功后触发
server.on('listening', () => {
const info = server.address()
console.log(`server running ${info.address}: ${info.port}`)
// 案例: 每隔两秒向组播发送一条消息
let a = 1
setInterval(() => {
server.send(`测试数据${a++}`, 20001, '224.1.1.101')
}, 2000)
})
// 绑定端口号
server.bind(20000)
接收数据:
// 组播
const dgram = require('dgram')
const client = dgram.createSocket('udp4')
client.on('listening', () => {
// 加入组播的组
client.addMembership('224.1.1.101')
})
// 当收到消息时触发
client.on('message', (msg, remoteInfo) => {
console.log(`收到消息:【${msg}】 from ${remoteInfo.address}:${remoteInfo.port}`)
})
// 绑定端口号
client.bind(20001)
原文:https://www.cnblogs.com/liea/p/11832547.html