【发布时间】:2015-11-06 05:26:11
【问题描述】:
[我已将此问题标记为由版主删除,直到我得到this问题的答案]
我的 javascript 客户端在通过带有 IPV4 IP 地址的 WebSocket 接口与 node.js(在 Ubuntu 上,更多 here)服务器通信时工作正常。
即使我的托管服务提供商已准备好为我分配 IPV4,让我改用 IPV6,因为现在 IPV4 的供应有限。
使用 IPV6 IP 时出现此错误:
WebSocket 连接到 'ws://[2600:3c00::f03c:91ff:fe73:2b08]:31333/' 失败:连接建立错误: 网络::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)
我什至在 Google Chrome 中运行过这段代码:
var ws = new WebSocket("ws://[2600:3c00::f03c:91ff:fe73:2b08]:31333");
ws.onerror = function(err)
{
console.log(err);
alert("Connection is error...");
};
但我得到了同样的错误:
WebSocket 连接到 'ws://[2600:3c00::f03c:91ff:fe73:2b08]:31333/' 失败:连接建立错误: net::ERR_ADDRESS_UNREACHABLE websocket.html:37 事件
可能是什么问题?
PS:目前我已经在 31333 端口停止了服务器。
【问题讨论】:
-
您是否检查过您的防火墙是否阻止访问?例如。如果您将 IP 用于 localhost 并 侦听本地 IPv6 地址,则连接到
ws://[::1]:31333似乎可以按预期工作(Chrome 44.0.2403.125,Linux)。 -
目前客户端服务器可以在同一台服务器上进行通信。
-
您的(本地)网络连接是否支持 IPv6?
-
在我的 Win7 PC 的本地连接属性中检查了 TCP/IPv6。而且我无法从我尝试过的 3 台 Windows-7 计算机上 ping 到 ipv6.google.com。
-
所以当您使用
ping -6 ipv6.google.com(或在Linux 上:ping6 ipv6.google.com)时没有收到回复?那么你就发现了你的问题,你应该尝试获得 IPv6 连接(这不是 Chrome 或你的应用程序的问题,而是你的网络的问题)。
标签: javascript node.js google-chrome-extension websocket ipv6