Nodejs需要查看哪个客户端已经退出

我使用telnet通过这个nodejs代码连接。 从telnet退出时,“结束”事件触发但不显示远程地址和端口。

var net = require('net'); var server = net.createServer(function(s) { console.log('CONNECT:' + s.remoteAddress + ':' + s.remotePort); s.on('data', function(data) { console.log('DATA: ' + s.remoteAddress + ':' + s.remotePort); s.write('You said "' + data + '"'); }); s.on('end', function() { console.log('END: ' + s.remoteAddress + ':' + s.remotePort); }); s.write('hello\r\n'); }); server.listen(8000, function() { console.log('Server started on port 8000'); }); 

在服务器控制台上,当我退出telnet时,我得到以下内容

 END: undefined:undefined disconnected 

有任何想法吗?

当客户端closures连接时会触发end事件。 在这种情况下, net.createServer的默认行为是closures连接(但见下文),所以在调用callback的时候没有更多的remoteAddressremotePort

最简单的解决scheme是在创build连接时将这些值存储在variables中:

 var server = net.createServer(function(s) { var address = s.remoteAddress; var port = s.remotePort; ... s.on('end', function() { console.log('END: ' + address + ':' + port); }); }); 

另一个选项是启用allowHalfOpen ,当客户端closures它时,这将停止服务器closures连接:

 var server = net.createServer({ allowHalfOpen : true }, function(s) { ... s.on('end', function() { console.log('END: ' + s.remoteAddress + ':' + s.remotePort); s.end(); // !!! close the server side explicitly }); });