javascript - Socket.io 2.0 未定义 socket.handshake.address

标签 javascript node.js socket.io

我正在尝试使用 socket.handshake.address 检索客户端 IP 地址,但它总是输出未定义的值。我不确定 io.on 的位置是否是导致错误的主要原因。但我需要帮助输出一些值。

以下是我的代码:

var app = require('http').createServer(response);
var io = require('socket.io')(app);
var fs = require('fs');
const readline = require('readline');

let clientIP;
console.log("your ip:" +clientIP);
io.on("connection", function(socket){
    socket.on("send message", function(sent_msg, callback){
        sent_msg = "[ " + getCurrentDate() + " ]: " + sent_msg;

        io.sockets.emit("update messages", sent_msg);
        callback();
    });
    clientIP = socket.handshake.address;
});

var port = process.env.PORT || 3000;
app.listen(port);
console.log("App running on port " +port);

最终,我想将 IP 地址存储到一个变量中,然后通过控制台记录它。稍后我会将该值用于不同的目的。

非常感谢您!

编辑:我能够console.log(socket.handshake.address),但看起来它正在输出::1。所以我打印了整个握手过程,这就是 console.logged

{ headers: 
   { host: 'localhost:200',
     connection: 'keep-alive',
     accept: '*/*',
     'user-agent': 'Mozilla/5.0 (Linux; Android 6.0; Nexus 5 Build/MRA58N) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/72.0.3626.119 Mobile Safari/537.36',
     referer: 'http://localhost:200/',
     'accept-encoding': 'gzip, deflate, br',
     'accept-language': 'en-US,en;q=0.9',
     cookie: 'Phpstorm-e80bf189=08d2953b-3e27-43a8-b34b-cdd36607b656; Webstorm-dddc562d=07419dd2-1d4c-40b9-bd13-7c5507036a78; _ga=GA1.1.1050967868.1539219676; Webstorm-dddc562e=7b5b97f7-e27a-471d-9a9a-553f616ec370; _ceg.s=pjjo44; _ceg.u=pjjo44; connect.sid=s%3AswIVrUf0ofg5SnevGXjW0b1j63FGeWL1.9sDRdPEtTG5eI9Z8oDjtmuakp6mo7%2B%2FdCel%2Bih4Qb1E; io=83uH7KPwAtjR7b9PAAAA' },
  time: 'Thu Feb 28 2019 15:11:33 GMT-0800 (PST)',
  address: '::1',
  xdomain: false,
  secure: false,
  issued: 1551395493723,
  url: '/socket.io/?EIO=3&transport=polling&t=MasO9T6',
  query: { EIO: '3', transport: 'polling', t: 'MasO9T6' } }

我在 stackoverflow 上读到了一些关于 IPv4 和 IPv6 快捷方式的帖子,但仍然找不到解决这个问题的答案。

最佳答案

关于javascript - Socket.io 2.0 未定义 socket.handshake.address,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/54917859/

相关文章:

javascript - D3 JS 绘制条形图

node.js - 无法在 EB CLI 中设置 CodeCommit

AngularJS ngResource 删除事件不调用回调

node.js - 在 Socket.io 中断开连接时是否需要 socket.leave() 一个房间?

javascript - 如何识别 socket.io 中不同的客户端?

node.js - 在带有 Node.js 的 Heroku 上使用 Socket.io 和 Redis

javascript - Highcharts 共享工具提示(用于线系列)- 悬停时根据绘图进行更改

javascript - 如何在 Jquery 中以不同方式检测 "Mouse wheel scroll"和 "Window manual scroll"

node.js - 安装 32 位和 64 位绑定(bind)

javascript - 检查数组中是否有任何项等于该值