2016-10-08 34 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