Узел Js Проблемы с широковещательной сетью UDP - PullRequest
0 голосов
/ 18 июня 2019

У меня есть этот код, который я хочу транслировать на сетевой широковещательный адрес с использованием узла js.

Кажется, это работает, если клиент и сервер работают на одних и тех же устройствах.Однако, если я запускаю код сервера на другом устройстве в сети.Я никогда не вижу, чтобы ни один из передаваемых пакетов попал в мой клиент.

У меня есть два Raspberry Pi, оба eth0 подключены к моей основной сети, поэтому я могу замазать их.

У меня есть один набор Raspberry Piв качестве беспроводной точки доступа через ее wlan0, статический IP-адрес 172.24.1.1, подсеть 255.255.255.0 с сервером DHCP, работающим в WLAN с использованием hostapd и dnsmasq.

Я подключаю свой второй пи к первому через wifiна своем wlan0 он соединяется успешно, получает адрес dhcp от первого (172.24.1.76).Я могу пропинговать оба устройства с другого.

Я хочу отправить широковещательный сетевой адрес для беспроводной сети, созданной 172.24.1.255, с одного пи, который будет получен всеми другими устройствами, подключенными к той же точке доступа Wi-Fi.,Код моего сервера и клиента приведен ниже.

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);

Если я запускаю оба сценария из одного и того жеpi в сети Wi-Fi Я вижу широковещательные пакеты на клиентском скрипте.

Однако, если я запускаю сервер на одном пи (точка доступа), а клиентский скрипт на другом пи (DHCP-клиент), яЯ никогда не вижу ни одного широковещательного пакета.

Что я делаю не так?

...