为什么socket.remoteAddress在'end'事件上未定义?

我有一个简单的TCP服务器,如下所示:

var net = require('net'); var PORT = 6346; var server = net.createServer(function(socket) { socket.on('connect', function() { console.log('Client connected: ' + socket.remoteAddress); socket.write('Welcome to the server!\r\n'); }); socket.on('end', function() { console.log('Client disconnected: ' + socket.remoteAddress); }); socket.on('error', function() { console.log('Client error: ' + socket.remoteAddress); }); socket.on('timeout', function() { console.log('Client timed out:' + socket.remoteAddress); }); }).listen(PORT); 

当我连接到服务器,我看到预期的Client connected: 127.0.0.1但是当我断开我看到Client disconnected: undefined 。 为什么socket.remoteAddress未定义,如何在断开连接时logging客户端的IP?

问题是,套接字断开后,某些属性(如remoteAddress )不再可用!

你可以通过用自己的对象包装套接字来解决这个问题,或者在连接的时候跟踪远程地址。 (closuresWoot)

即使在断开连接之后,remoteAddress属性也会一直存在https://github.com/joyent/node/commit/8c38b07252d86f4eef91344f8df4f0c3e38bca35处于稳定版本的Node.js中。 io.js将在下一个版本中使用它: https : //github.com/iojs/io.js/issues/1157