2

Windows 7 の nodejs 10.5 でのみ UDP バインド エラー EINVAL が発生します。ノード 6 と 8 は失敗せず、Linux で動作します。私はすべての基本的な開発を Windows で行っているため、これは控えめに言っても面倒です。大きなノードの利点の 1 つです。

bind 呼び出し (新しい非同期形式) は失敗しますが、send メソッドの組み込みバインドも失敗します。実際には、データ (ブロードキャスト) を送信したいだけなので、通常はソケットをバインドしませんが、send メソッドはこれを自動的に行います。bind メソッドを使用してこれを確認しましたが、これも失敗します。

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 が使用されるのはなぜですか?

send が 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 に答える