0

TLSモジュールを使用してnode.jsで単純なサーバーを作成しています。これまでのところ、クライアントはサーバーに接続したり、データを送信したり、サーバーから切断したりすることができます。ただし、サーバーから切断するときにクライアントのIPアドレスを出力したい。現状では、イベントコールバック関数の外部からクライアントのIPアドレスを出力することはできますが、コールバック内で印刷することはできません(チェックon('end))。

var tls = require('tls');
var fs = require('fs');

var server = tls.createServer({
    key: fs.readFileSync('server-key.pem'),
    cert: fs.readFileSync('server-cert.pem'),
}, function(cleartextStream) {
    cleartextStream.setEncoding('utf8');

    /*
     * Error receiving data.
     */
    cleartextStream.on('error', function (exception) {

    });

    /*
     * Signal that it is safe to write again.
     */
    cleartextStream.on('drain', function () {

    });

    /*
     * New data received.
     */
    cleartextStream.on('data', function (data) {
        console.log('New data: '+data);
    });

    /*
     * Remote client disconnected.
     */
    console.log(cleartextStream.remoteAddress); // This prints the IP address correctly.

    cleartextStream.on('end', function () {
        console.log(cleartextStream.remoteAddress); // This prints undefined.
    });

    /*
     * Server is shutting down.
     */
    cleartextStream.on('close', function () {

    });
});

server.listen(8000, function() {
  console.log('Server listening.');
});
4

1 に答える 1

0

イベントが発生する前に、のremoteAddressプロパティcleartextStreamが削除されたようです。'end'したがって、リモートアドレスをキャプチャして、'end'イベントコールバックで引き続き使用できるようにします。

var remoteAddress = cleartextStream.remoteAddress;
cleartextStream.on('end', function () {
    console.log(remoteAddress);
});
于 2012-08-09T00:43:44.043 に答える