2

我只在 Windows 7 上的 nodejs 10.5 上收到 UDP 绑定错误 EINVAL。节点 6 和 8 不会失败,它在 linux 下工作。至少可以说这很烦人,因为我在 Windows 下进行所有基本开发。一大节点优势之一。

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

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 发送调用?

有人可以验证发送在 10.5 中的 Windows 7 上工作吗非常感谢

4

1 回答 1

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();
    });
});
于 2014-11-11T01:53:51.077 回答