У меня есть этот код, который я хочу транслировать на сетевой широковещательный адрес с использованием узла 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-клиент), яЯ никогда не вижу ни одного широковещательного пакета.
Что я делаю не так?