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

sty*_*fle 6 sockets node.js

我有一个简单的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);
Run Code Online (Sandbox Code Playgroud)

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

Bra*_*rad 10

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

您可以通过使用自己的对象包装套接字,或通过在连接时跟踪其他位置的远程地址来解决此问题.(Woot for closures.)