在Windows上发送数据报时发生EACCES错误

当执行dgram.udp4套接字的send()方法时,我的程序会抛出EACCES错误,但只能在Windows上执行。

代码:

var dgram = require('dgram'); var monsocket = dgram.createSocket("udp4"); monsocket.on("listening", function () { comBroadcastCallUp(); }); var comBroadcastCallUp = function() { var message = new Buffer(JSON.stringify({ protocol: "psdp", command: "call-up" })); monsocket.setBroadcast(true); monsocket.send(message, 0, message.length, 32681, '255.255.255.255', function (err) { if (err) console.log(err) else console.log("<PcStatus:PSDP> Message sent: " + message + os.EOL + "Message length: " + message.length); }); monsocket.setBroadcast(false); } monsocket.bind(32681); 

Windows上相同的代码,terminal输出:

 { [Error: send EACCES] code: 'EACCES', errno: 'EACCES', syscall: 'send' } 

Linux上的terminal输出:

 <PcStatus:PSDP> Message sent: {"protocol":"psdp","command":"call-up"} Message length: 39 

我检查防火墙,如果其他程序保持端口繁忙,什么都没有…

我相信Windows 7不支持广播到255.255.255.255 。 您将需要限制发送到一个特定的子网。

另外请记住,不是所有的路由器都会路由到255.255.255.255数据包。