2012-08-08 120 views
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.'); 
}); 

回答

0

貌似的cleartextStreamremoteAddress属性之前'end'激发事件中移除。因此,请捕获远程地址,以便在您的'end'事件回调中仍可用:

var remoteAddress = cleartextStream.remoteAddress; 
cleartextStream.on('end', function() { 
    console.log(remoteAddress); 
}); 
+0

谢谢,就是这样! – 2012-08-09 00:53:17