2012-08-08 134 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