连接的设备和电脑 不在同一网段下(比如设备是192.168.10.100, 本地IP是192.168.1.10),防火墙开启后,UDP的广播回调收不到,关闭就可以接收到;
使用Wireshark抓包是否开启防火墙都是正常的(发送广播和接收都是正常的);
我看到有些软件是可以做的开启防火墙也可以正常的;
我使用的是electron和nodeJS
请问下这种情况下怎么处理可以不开启防火墙也能正常获取到广播返回的数据;
const dgram = require('dgram')
const client = dgram.createSocket('udp4')
const broadcastAddress = '255.255.255.255'
const port = 7000
client.on('error', (err) => {
console.log(`client error:\n${err.stack}`)
client.close()
})
client.on('message', (msg, rinfo) => {
// 防火墙开启后接收不到数据
console.log(`${msg}`, rinfo)
client.close()
})
// 设置套接字选项以允许广播
client.bind(
{
address: localAddress,
exclusive: false // 如果设置为true,则不允许其他套接字绑定到相同的地址和端口组合
},
function () {
const message = Buffer.from(JSON.stringify({ device: 'mesh', method: 'discover' }))
client.setBroadcast(true)
client.send(message, 0, message.length, port, broadcastAddress, function (err) {
if (err) {
return console.log('Error sending broadcast:', err)
}
})
}
)
可以尝试为防火墙开放7000端口
如果是linux系统
sudo iptables -I INPUT -p udp --dport 7000 -j ACCEPT
,如果是windows系统,在控制面板\系统和安全\Windows Defender 防火墙\高级设置
中新建入站规则
,添加UDP端口7000;