Socket.io 客户端无法连接本地主机,但可以连接到 127.0.0.1

Kya*_*ngi 5 localhost node.js socket.io

我有一个使用 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');
Run Code Online (Sandbox Code Playgroud)

在我的客户端,我正在使用这条线

socket = io.connect("http://localhost:3000");
Run Code Online (Sandbox Code Playgroud)

尝试连接到我的服务器,但它不起作用。如果我使用线路,连接工作完美

socket = io.connect("http://127.0.0.1:3000");
Run Code Online (Sandbox Code Playgroud)

如果我在浏览器上输入 localhost:3000,它会按预期将我发送到说 Hello World 的页面,与 127.0.0.1 相同,因此它仅在我使用 io.connect 时不起作用。

我尝试过的事情是:

  • 更改主机文件(添加 127.0.0.1 localhost 行,删除包括 ::1 的行,创建一个新的主机文件并覆盖它)
  • 在不同的机器上试了一下,还是一样的问题
  • 重置路由器设置。
  • 在 cmd 提示符下 ping localhost,它说回复来自 ::1: time<1ms
  • 安装不同版本的 socket.io 和 node.js(最新版本和 2 个月前的版本)

考虑到 Web 浏览器发生的情况,localhost 似乎可以工作,但只有在我使用 socket.io 时它才不起作用。我一直无法解决这个突然出现的问题,所以如果有人能给我一些可能导致这种情况的见解,我将不胜感激。

rsp*_*rsp 3

这似乎是 IPv4/IPv6 问题。您可以尝试更改此设置:

server.listen(3000, '0.0.0.0');
Run Code Online (Sandbox Code Playgroud)

对此:

server.listen(3000, '::1');
Run Code Online (Sandbox Code Playgroud)

或这个:

server.listen(3000);
Run Code Online (Sandbox Code Playgroud)

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