在close事件处理程序中获取套接字的IP地址

时间:2012-08-25 23:15:18

标签: sockets node.js

socket.on('data', function(data)
{
    console.log(socket.remoteAddress + ":" + socket.remotePort);
}

socket.on('close', function()
{
    console.log(socket.remoteAddress + ":" + socket.remotePort);
}

数据处理程序中的日志显示127.0.0.1:8000

关闭处理程序中的日志显示undefined:undefined

我正在尝试使用IP保留连接套接字列表:端口作为密钥。如果我不知道哪一个已关闭,我该如何从列表中删除它?如何获取IP:关闭套接字关闭后的端口?

3 个答案:

答案 0 :(得分:4)

这就是我跟踪客户的方式:

server.on('connect', function(socket)
{
    socket.key = socket.remoteAddress + ":" + socket.remotePort;
    clients[socket.key] = socket;

    socket.on('close', function()
    {
        delete clients[socket.key];
    }
}

非常感谢Node.js IRC频道中的mscdex建议这个解决方案!

答案 1 :(得分:0)

socket.on('connect', function()
{
   socket.address = socket.remoteAddress + ":" + socket.remotePort;//save  the address in socket object
   console.log(socket.remoteAddress + ":" + socket.remotePort);
});
socket.on('data', function(data)
{
   console.log(socket.address );
});

socket.on('close', function()
{
  console.log(socket.address );
});

只需将数据与套接字对象保持关联。希望这会有所帮助。

答案 2 :(得分:0)

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