1

以下は単純な Node.js tcp サーバーです。

var net = require('net');

var conn = [];

var server = net.createServer(function(client) {//'connection' listener
    var i = conn.push(client) - 1;
    //console.log('[conn',i,']', client.remoteAddress, ':', client.remotePort);
    console.log('[disc]', conn[i].remoteAddress, ':', conn[i].remotePort);

    client.on('end', function() {
        console.log('[disc]', conn[i].remoteAddress, ':', conn[i].remotePort);
    });

    client.on('data', function(msg) {
        console.log('[data]', msg.toString());
    })

    client.write('hello\r\n');
    //client.pipe(client);
});

server.listen(8080);

クライアントが接続、送信、または切断すると、クライアントに関する情報が出力されます。ただし、クライアントが切断された場合にのみundefined、ソケット情報ではなく出力されます。例:

[conn] 127.0.0.1 : 52711
[data] 127.0.0.1 : 52711 world!
[disc] undefined : undefined

なぜこれが起こるのですか?これは、閉じたときにソケットが破棄されるためですか? ソケットの閉鎖に関する情報を知る必要があります。

4

1 に答える 1

2

切断されたソケットにはリモート エンドポイントがないため、リモート アドレスもリモート ポートもありません。ソケットは破壊されていません。接続されていないだけです。ソケットが切断された後にリモート アドレスとポートを知る必要がある場合は、自分で追跡する必要があります。

于 2012-12-09T06:25:23.550 に答える