Skip to content

img.pngimg_1.png

UPD 单播

javascript
// server.js
const dgram = require('node:dgram')
const server = dgram.createServer('upd4')

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

server.on('message', (msg, remoteInfo) => {
    const { address, port } = remoteInfo
    server.send('world', port, address, (err) => {
        if (err) {
            console.log('发送失败')
        } else {
            console.log('发送成功')
        }
    })
})

server.bind(41234) // 绑定监听端口
javascript
// client.js
const dgram = require('node:dgram')
const client = dgram.createServer('upd4')

client.on('listening', () => {
    const { address, port } = server.address()
    console.log(address, port)
})

client.on('message', (msg, remoteInfo) => {
    const { address, port } = remoteInfo
    server.send('world', port, address, (err) => {
        if (err) {
            console.log('发送失败')
        } else {
            console.log('发送成功')
        }
    })
})

// server.bind(41234) // 绑定监听端口, 客户端可以不分配,使用随机端口

广播

javascript
// server.js
const dgram = require('node:dgram')
const server = dgram.createServer('upd4')

server.on('listening', () => {
    server.setBroadcaset(true)
    const { address, port } = server.address()
    console.log(address, port)
    // 每两秒发送一次广播信息
    setInterval(() => {
        const ip = '255.255.255.255' // 广播地址(受限于局域网)
        const ip2 = '192.169.1.255' // 直接地址,这个地址末尾是 255,可以跨网段进行广播,比如当前网段是192.168.2.x,可以往 192.168.1.255 进行传播

        // 凡是在局域网内监听了 8000 端口的 upd 服务,都会收到此广播
        server.send('message', 8000, ip, (err) => {
            if (err) {
                console.log('发送失败')
            } else {
                console.log('发送成功')
            }
        })
    }, 2e3)
})
javascript
// client.js
const dgram = require('node:dgram')
const client = dgram.createServer('upd4')

client.on('message', (msg, remoteInfo) => {
    const { address, port } = remoteInfo
    console.log(`get msg from ${address}:${port}, ${msg}`)
})

server.bind(8000)

组播(只有加入了对应的组,才能接收到信息)

javascript
// server.js
const dgram = require('node:dgram')
const server = dgram.createServer('upd4')

server.on('listening', () => {
    const { address, port } = server.address()
    console.log(address, port)
    server.send('message', 8000, '224.0.1.100', (err) => {
        if (err) {
            console.log('发送失败')
        } else {
            console.log('发送成功')
        }
    })
})
javascript
// client.js
const dgram = require('node:dgram')
const client = dgram.createServer('upd4')

client.on('listening', () => {
    client.addMembership('224.0.1.100')
})

client.on('message', (msg, remoteInfo) => {
    const { address, port } = remoteInfo
    console.log(`get msg from ${address}:${port}, ${msg}`)
})

server.bind(8000)