为啥我不能在“localhost”上收听,但可以在“127.0.0.1”上收听?

Posted

技术标签:

【中文标题】为啥我不能在“localhost”上收听,但可以在“127.0.0.1”上收听?【英文标题】:Why can't I listen on 'localhost' but can I listen on '127.0.0.1'?为什么我不能在“localhost”上收听,但可以在“127.0.0.1”上收听? 【发布时间】:2011-10-11 23:51:49 【问题描述】:

我很难理解为什么以下代码行在 node.js 中有效:

server.listen(12345, "127.0.0.1"); // works

但这个没有:

server.listen(12345, "localhost"); // fails

编码localhost 字面上会导致以下错误:

events.js:45
        throw arguments[1]; // Unhandled 'error' event
                       ^
Error: ECONNREFUSED, Could not contact DNS servers
    at IOWatcher.callback (dns.js:74:15)

我不明白为什么它应该“联系 DNS 服务器”,因为它是我的 HOSTS 文件中定义的本地主机(我在 Windows 下使用 node.js)。

为什么硬编码localhost 不起作用?

【问题讨论】:

您是否检查过您的主机文件以确保本地主机映射没有被覆盖?如果从命令行 ping localhost 会发生什么? @shanethehat:效果很好;我在http://localhost/ 的网络服务器也没有任何问题。 您是否尝试过使用“http:// localhost”(否则会更改评论时添加的空格)?我问是因为您说过您尝试了“localhost”,然后在浏览器中使用 http 进行了尝试。如果您只是在浏览器中输入“localhost”,浏览器会帮您一个忙,并自动为您添加 http://。 @DDoSAttack:谢谢,但运气不好。 http://localhost 不起作用; http://127.0.0.1 也不起作用,只能精确到 127.0.0.1 【参考方案1】:

你在使用 cygwin 构建吗?你试过'Set up Domain Name Resolution (DNS)'吗:

Cygwin 在内部使用 Windows 进行 DNS 查询。 node.js 使用依赖于 /etc/resolv.conf 的 c-ares 库。 Cygwin 附带一个空的 /etc/resolv.conf。为了从您的脚本启用网络,请将这些 IP 添加到文件(Google 公共 DNS)中:

$ vim /etc/resolv.conf

nameserver 8.8.8.8
nameserver 8.8.4.4

【讨论】:

我没有,但我应该在 Windows 上将文件 /etc/resolv.conf 保存在哪里? '/' 通常是 cygwin 安装目录,即如果你在 c:\cygwin 安装了 cygwin,那么 resolv.confc:\cygwin\etc\resolv.conf【参考方案2】:

原来使用 cygwin 构建是问题所在。

我查看了http://nodejs.org/,发现直到最近才提供了一个本地 Windows 二进制文件,它的作用就像一个魅力。

【讨论】:

【参考方案3】:

我从来没有亲自使用过node.js,但是一些快速搜索发现了一些有趣的结果......

据我所知,我所看到的一切都表明您需要找到要收听的 IP 地址。这是一个示例:Get local IP address in node.js 这种行为也很有意义。域名是任意的,重要的是 IP,所以有时这就是所有想要处理的东西。

如果我遗漏了有关 node.js 工作原理的信息,我很抱歉。

【讨论】:

以上是关于为啥我不能在“localhost”上收听,但可以在“127.0.0.1”上收听?的主要内容,如果未能解决你的问题,请参考以下文章

Artisan 错误:无法在 localhost:8000 上收听

Gstreamer:为啥我不能在 localhost 上通过 UDP 发送数据?

安装好linux系统后,提示localhost login:,我输入root后回车,弹出password:后为啥不能输入密码。

为啥我可以在框架上绘制但不能在容器内绘制?

为啥我的备用图标可以在 iPhone 上工作,但不能在 iPad 上工作?

如何让 Flutter web 在 127.0.0.1 上收听