0

次のコードがあります。

var dgram = require("dgram");

var start = 27015;

for(var i = start; i < (start + 100); i++)
{
    var server = dgram.createSocket("udp4");

    server.on("message", function(msg, sender) {
        console.log(server.address().port)
    });

    server.bind(i);
}

常に最後のポート (27114) を出力するのはなぜですか?

どうしたの?受信サーバーのポートを特定するのに役立つと思いました。

ありがとうございました。

4

3 に答える 3

3

Ian は正しい方向に進んでいます。閉鎖が必要です。ただし、彼の方法ではサーバーの逆参照が発生します。

for(var i = start; i < (start + 100); i++) {
  (function(port) {
    var server = dgram.createSocket("udp4");

    server.on("message", function(msg, sender) {
     console.log(server.address().port)
    });
    server.bind(port);
  })(i);
 }

これにより、各serverインスタンスがクロージャー内で分離されますが、逆参照されません。それらは、スコープの問題によって上書きされることなく、存在し続けます。

于 2013-05-15T20:17:11.007 に答える