gpt4 book ai didi

node.js - Nodejs 需要查看哪个客户端已退出

转载 作者:太空宇宙 更新时间:2023-11-03 22:55:32 26 4
gpt4 key购买 nike

我使用 telnet 通过此 Nodejs 代码进行连接。从 telnet 退出时,会触发“end”事件,但不会显示远程地址和端口。

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

有什么想法吗?

最佳答案

当客户端关闭连接时,会触发 end 事件。在这种情况下,net.createServer 的默认行为也是关闭连接(但见下文),因此不再有 remoteAddressremotePort 调用回调时。

最简单的解决方案是在创建连接时将这些值存储在变量中:

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

另一个选项是启用 allowHalfOpen ,当客户端关闭其端时,这将阻止服务器关闭连接:

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
});
});

关于node.js - Nodejs 需要查看哪个客户端已退出,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16563077/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com