javascript - Socket.io 2.0 未定义的 socket.handshake.address
问题描述
我正在尝试使用 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 快捷方式的帖子,但仍然找不到解决问题的答案。
解决方案
推荐阅读
- react-native - React-Native Undefined 不是对象(评估 this.props.navigator.push')
- python - Tensorflow 2 中的 tensorflow.contrib.predictor.from_saved_model()
- highcharts - 高图表中 x 轴的数据,时间块为 15 分钟
- javascript - JSON.parse(JSON.stringify(obj)) 如何深度克隆一个对象?
- android-studio - 如何在部分匹配“名称”的文件中搜索字符串
- phpstorm - 在文件级别标记为符合 PSR
- outlook-redemption - RDOSession.LogonExchangeMailbox 不尝试登录
- typescript - 是否有输出纯 TypeScript 文件的协议缓冲区编译器?
- c# - 让多个 .NET 应用程序相互通信的最佳方式
- javascript - 如何使用 Three.js 制作视差效果