[我已将此问题标记为由主持人删除,直到我回答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
我已经使用工具http://www.subnetonline.com/pages/ipv6-network-tools/online-ipv6-port-scanner.php
检查了端口31333是否确实打开了我甚至尝试过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端口停止了服务器。
答案 0 :(得分:2)
Realtek PCIe GBE系列控制器上未启用IPv6。如果是的话,会有一行说“#34;链接本地IPv6地址"在ipconfig结果中。
转到控制台>网络>更改适配器设置>右键单击适配器>属性。检查IPv6。
答案 1 :(得分:0)
需要在系统上启用IPv6,并且它与ISP之间的每个路由器以及ISP必须准备好IPv6并将其提供给最终用户。 nslookup
工作的原因是它只返回AAAA记录,而不是实际通过IPv6连接。 IPv4无法直接与IPv6通信,反之亦然。您无法使用IPv4主机ping IPv6主机。