Node Js UDP网络广播问题

问题描述 投票:0回答:1

我有这个代码,我想使用节点js广播到网络广播地址。

如果客户端和服务器在同一设备上运行,这似乎可以工作。但是,如果我在网络上的其他设备上运行服务器代码。我从来没有看到任何广播的数据包打到我的客户端。

我有两个Raspberry Pi的两个eth0都已连接到我的主网络,因此我可以使用腻子。

[我有一个Raspberry Pi通过其wlan0,静态IP地址172.24.1.1,子网255.255.255.0设置为无线热点,并且使用hostapd和dnsmasq在WLAN上运行了DHCP服务器。

我通过它的wlan0上的wifi将第二个pi连接到第一个pi,它成功地从第一个pi获取了dhcp地址(172.24.1.76)。我可以互相ping通这两个设备。

我要向从一个pi创建的172.24.1.255的无线网络发送到网络广播地址,以供连接到同一wifi接入点的所有其他设备接收。我将以下代码作为服务器和客户端代码。

server.js

const dgram = require('dgram');
const os = require('os');

const BroadcastAddress = '172.24.1.255';
const BroadcastToPort = 6000;

let count = 0;

const broadCastUDPPAcket = () => {
    const sender = dgram.createSocket('udp4');
    sender.bind(0, '172.24.1.76', () => {
        sender.setBroadcast(true);
        count++;
        let message = Buffer.from(
            `Broadcast Message ${count}, From: ${sender.address().address}:${sender.address().port} To: ${BroadcastAddress}:${BroadcastToPort}`
        );
        sender.send(message, 0, message.length, BroadcastToPort, BroadcastAddress, () => {
            sender.close();
            console.log(`Sent '${message}'`);
        });
    });
};

setInterval(broadCastUDPPAcket, 5 * 1000);

client.js

const dgram = require('dgram');
const os = require('os');
const listener = dgram.createSocket('udp4');

listener.on('error', err => {
    console.error(`listener error:`, os.EOL, err.message, os.EOL, err.stack);
    listener.close();
});

listener.on('message', (msg, rinfo) => {
    console.log(`msg received`, msg);
    console.log(`msg received hex`, msg.toString('hex'));
    console.log(`msg received utf8`, msg.toString());
    console.log(`rinfo received`);
    console.dir(rinfo, { depth: null, colors: true });
});

listener.on('listening', () => {
    const address = listener.address();
    console.log(`listener listening ${address.address}:${address.port} Waiting to receive trigger sync .....`);
    listener.setBroadcast(true);
});

listener.bind(6000);

如果我从wifi网络上的同一个pi运行两个脚本,我会在客户端脚本上看到广播数据包。

但是,如果我在一个pi(访问点)上运行服务器,而在另一个pi(DHCP客户端)上运行客户端脚本,则永远不会看到任何广播数据包。

我在做什么错?

node.js raspberry-pi udp udpclient
1个回答
0
投票

我在遇到同样的问题。我的代码与您的代码相似。我正在运行三台计算机,其中两台使用Windows 10,一台使用raspbian的pi 0。所有机器都在运行客户端和服务器。Windows计算机不从pi获取消息,而是从彼此获取消息。 pi从Windows获取所有消息。

因此pi似乎有问题

Pi正在运行raspbian repo中的buster和nodejs 10.15

© www.soinside.com 2019 - 2024. All rights reserved.