2016-10-08 31 views
0

我想知道如何在用户连接到服务器时获取IP地址。我已经使用这个代码应该记录连接地址和端口这样的尝试:在socket.io中获取连接的IP地址1.4.5

var io = require('socket.io')(serv, {}); 
 
io.sockets.on('connection', function(socket) { 
 
    var address = socket.handshake.address; 
 
    console.log('New connection from ' + address.address + ':' + address.port); 
 
    socket.on('request', function(data) { 
 
    console.log('Request Sent') 
 
    length = data.length 
 
    if (data.request == 'sessionID') { 
 
     socket.emit('sendSessionID', { 
 
     id: generateSessionID(length) 
 
     }); 
 
     console.log('Sent session ID') 
 
    } 
 
    if (data.request == 'players') { 
 

 
    } 
 
    }); 
 
});
当我虽然address.address是不确定的,并与address.port同样运行该代码。那么当我使用1.4.5时,我该如何获得IP和端口呢?我找不到任何新更新的内容。

回答

2

IP地址在socket.handshake.address而不是socket.handshake.address.address


虽然这一切都不出现在socket.io加以记录,你可以得到远程IP地址和远程端口这些:当我连接到服务器socket.io

socket.request.connection.remoteAddress 
socket.request.connection.remotePort 

从我的LAN上的另一台计算机上,我看到与这些输出以上两个设置:

::ffff:192.168.1.56 
51210 

这是正确给你的IP地址和所连接到Serv的这种远程计算机的端口呃。 IP地址::ffff:192.168.1.56是一个IPv4映射地址。你将不得不在某些系统上处理这种形式的地址。

+0

那么我该如何获得端口?也打印出的地址为:: ffff:然后ip或有时它只是打印出来:: 1我不知道发生了什么 – McMatt

+0

@McMatt - 我不知道你会在socket.io中找到端口。显然,无论您的服务器在监听哪个端口。您所看到的IP地址可能是本地主机的IPv6表单。尝试从外部IP连接时,而不是本地主机。 – jfriend00

+0

@McMatt - 下面是关于IPv4到IPv6地址格式的一些信息:[什么时候混合IP表示法:ffff:192.168.1.4合适?](http://stackoverflow.com/questions/5861107/when-is-the -hybrid-IP-符号 - ffff192-168-1-4相适应)。 – jfriend00