Socket.io客户端无法连接到localhost,但可以连接到127.0.0.1。

7

我有一个使用node.js搭建的服务器,现在想要用socket.io连接服务器。2个月前这个服务器还能够完美工作,但是现在不知道为什么它不能正常工作了。服务器代码如下:

var http = require('http');
var server = http.createServer(function (request, response) {
  response.writeHead(200, {"Content-Type": "text/plain"});
  response.end("Hello World\n");
});

var io = require('socket.io')(server);    

io.sockets.on('connection', function (socket) {
 console.log ('Client connected.'); });

console.log ('Server started.');
server.listen(3000, '0.0.0.0');

在我的客户端上,我正在使用以下代码行:
socket = io.connect("http://localhost:3000");

我尝试连接我的服务器,但是无法成功。如果我使用该行,则连接完美运作。

socket = io.connect("http://127.0.0.1:3000");

如果我在浏览器上输入localhost:3000,它会像预期的那样发送到显示Hello World的页面,127.0.0.1也是一样,只有在使用io.connect时才无法工作。
我尝试过以下几点:
更改主机文件(添加行127.0.0.1 localhost,删除包括::1的行,创建一个新的主机文件并覆盖它);
在另一台机器上尝试,仍然存在同样的问题;
重置路由器设置;
在cmd提示符下ping本地主机,它说回复来自::1:时间<1ms;
安装不同版本的socket.io和node.js(最近的版本和两个月前的版本)。
考虑到从Web浏览器发生的情况,localhost似乎有效,但只有当我使用socket.io时才无法工作。我一直无法解决这个突然出现的问题,所以如果有人能给我一些关于可能导致此问题的见解,我将不胜感激。

1
考虑到相同的代码在两个月前完美运行,我认为代码不是问题,而是与我的计算机或互联网设置有关的问题。我还尝试了ipconfig /flushdns和/registerdns,但没有帮助。考虑到在网页上,localhost:3000可以正常工作,这也不是主机文件的问题... - Kyangi
1个回答

3

看起来是IPv4/IPv6的问题。您可以尝试更改以下内容:

server.listen(3000, '0.0.0.0');

转换为:

server.listen(3000, '::1');

或者这个:
server.listen(3000);

2
当我这样做时,似乎我的客户端无法使用127.0.0.1或localhost连接到服务器。 - Kyangi

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接