2015-08-13 54 views
16

調用說話的Node.js(就當使用IPV6 IP的WebSocket接口

我的JavaScript客戶端是工作的罰款[我舉報了這個問題,由主持人,直到我得到的回答我的問題this刪除] Ubuntu,更多here)服務器通過WebSocket接口與IPV4 IP地址。

即使我的主機提供商已準備好分配IPV4,但讓我改爲使用IPV6,因爲現在IPV4的供應有限。

當使用IPV6 IP我得到這個錯誤:

WebSocket connection to 'ws://[2600:3c00::f03c:91ff:fe73:2b08]:31333/' failed: Error in connection establishment: net::ERR_ADDRESS_UNREACHABLE

我檢查端口31333的確是開放使用工具:http://www.subnetonline.com/pages/ipv6-network-tools/online-ipv6-port-scanner.php

我甚至試過的解決方案,如IPv6 address giveing syntax error in internet explorer-10 websocket - 即:2600-3c00-0-0-f03c-91ff-fe73-2b08.ipv6-literal.net

我已經運行此客戶端,並且能夠在兩臺服務器都在遠程運行時連接到服務器基於Ubuntu的服務器:

var WebSocket = require('ws') 
    , ws = new WebSocket('ws://[2600:3c00::f03c:91ff:fe73:2b08]:31333'); 
ws.on('open', function() { 
    ws.send('something'); 
}); 
ws.on('message', function(message) { 
    console.log('received: %s', message); 
}); 

然而,當我從我的Windows 7,而服務器是遠程Ubuntu一個執行與此相同的客戶端,這是無法連接:

> $ node c2.js events.js:85 
>  throw er; // Unhandled 'error' event 
>   ^Error: connect ENETUNREACH 
>  at exports._errnoException (util.js:746:11) 
>  at TCPConnectWrap.afterConnect [as oncomplete] (net.js:1010:19) 

我甚至在谷歌瀏覽器運行這段代碼:

var ws = new WebSocket("ws://[2600:3c00::f03c:91ff:fe73:2b08]:31333"); 

ws.onerror = function(err) 
{ 
    console.log(err); 
    alert("Connection is error..."); 
}; 

,但我得到了同樣的錯誤:

WebSocket connection to 'ws://[2600:3c00::f03c:91ff:fe73:2b08]:31333/' failed: Error in connection establishment: net::ERR_ADDRESS_UNREACHABLE websocket.html:37 Event

可能是什麼問題?

PS:在現階段,我已經停止服務器在端口31333.

+0

您是否檢查防火牆是否阻止訪問?例如。如果你使用本地IP地址*和*監聽本地IPv6地址,那麼連接到'ws:// [:: 1]:31333'似乎按預期工作(Chrome 44.0.2403.125,Linux)。 –

+0

目前客戶端服務器能夠在同一臺服務器上進行通信。 – user5858

+1

您的(本地)網絡連接是否支持IPv6? –

回答

1

的IPv6上沒有你的Realtek的PCIe GBE家庭控制器啓用。如果是這樣,ipconfig結果中會有一行顯示「Link-local IPv6 Address」。

轉到控制面板>網絡>更改適配器設置>右鍵單擊適配器>屬性。檢查IPv6。

+0

試圖發佈超級用戶這個答案,但不能因爲問題被標記爲重複那裏。 –

+0

確切地說,'ipconfig'結果顯示IPv6未在系統上配置。 –

0

需要在系統上啓用IPv6,並且它與ISP之間的每個路由器以及ISP必須準備好IPv6並將其提供給最終用戶。 nslookup的工作原理是它只是返回AAAA記錄,而不是通過IPv6實際連接。 IPv4不能直接與IPv6通信,反之亦然。您無法使用IPv4主機ping IPv6主機。