2013-09-23 85 views
2

我只在Windows 7 节点6,8不失败,它工作在linux下10.5的NodeJS得到一个UDP绑定错误EINVAL UDP绑定。至少这是令人讨厌的,因为我在Windows下做了所有的基础开发。一个odf的大节点的优势。EINVAL的NodeJS误差在Win 7

绑定调用(在新的异步形式)失败,而且在发送方法的固有绑定失败。 其实我只想发送数据(广播),所以我通常不会绑定套接字,但是,发送方法会自动执行此操作。我通过使用绑定方法验证了这一点,并且这也失败了。

Created Dgram socket 255.255.255.255:3001 

events.js:72 
     throw er; // Unhandled 'error' eve 
      ^
Error: bind EINVAL 
    at errnoException (dgram.js:440:11) 
    at dgram.js:207:28 
    at dns.js:72:18 
    at process._tickCallback (node.js:415: 

从错误堆栈:当地址被指定为地址而不是字符串时,为什么使用DNS的发送调用?

可有人请核实发送Windows 7上作品10.5 千恩万谢

回答

1

看来,你不能设置广播标志,直到数据报被绑定到指定端口后(端口绑定到端口如果您在发送之前不绑定它,则为0)。以下代码片段显示了如何实现逻辑。

var client = dgram.createSocket("udp4"); 

console.log('binding'); 
client.bind(0); 

client.on('listening', function() { 

    console.log('setting broadcast flag'); 
    client.setBroadcast(true); 

    console.log('sending'); 
    client.send(message, 0, message.length, 41234, '255.255.255.255', function (err, bytes) { 
     console.log("Sent message: " + err); 
     client.close(); 
    }); 
});