Node.js:无法从同一networking上的不同设备访问服务器

注意:还有一些其他人也遇到过类似的问题,但是通过在代码中修正一些小问题来解决这些问题,这些代码涉及到服务器如何监听(在我看到他们在http.createServer(...).listen()把“127.0.0.1”作为参数的例子http.createServer(...).listen() 。但是,我没有相同的问题。

当我尝试从同一LANnetworking上的另一台计算机连接到我的node.js服务器时,Chrome表示无法连接。

这是testtesttest.js

 var http = require('http'); http.createServer(function(req,res) { res.writeHead(200,{'Content-Type': 'text/plain'}); res.end('Working'); }).listen(3000); 

当我尝试input192.168.1.73:3000 (当然192.168.1.73是我运行服务器的机器的IP)到浏览器(Chrome浏览器,虽然我也试过其他浏览器,我也有类似的问题)我的其他机器,它给出的错误“糟糕!谷歌浏览器无法连接到192.168.1.73:3000”。 当我在本地机器上键入相同的地址,它工作正常。

我不确定该怎么做。 我真的希望这只是我的一个愚蠢的错误(我很抱歉可能浪费你的时间),而不是我必须进入我的路由器的东西。

非常感谢您的帮助。

尝试改变这一点

 .listen(3000); 

对此

 .listen(3000, "0.0.0.0"); 

只要把它放在这里,以防止其他人。 当我尝试将手机连接到本地计算机时,我遇到了两个整天的问题…这是因为手机上的wifi已closures。

您必须打开3000端口,以便可以从远程机器访问它。 你可以在iptables文件中做到这一点。 使用下面的命令打开文件

 vi /etc/sysconfig/iptables 

现在在该文件中的拒绝行之前添加下面的行

 -A INPUT -p tcp -m tcp --dport 3000 -j ACCEPT 

现在使用下面的命令重新启动iptables服务

 service iptables restart 

现在,您重新启动服务器,然后重试。 它应该工作..

下面是我跟着哪个工作的一步

我的服务器代码

 var http=require('http'); http.createServer(function(request,response){ response.writeHead(200,{'Content-Type':'text/plain'}); response.end('Im Node.js.!\n'); console.log('Handled request'); }).listen(8080, "0.0.0.0");; console.log('Server running a http://localhost:8080/'); 

添join站规则。

  1. 创build一个udp入站规则(因为我不能find任何http协议)。
  2. 创build后,转到创build的规则的属性。
  3. select“协议和属性”选项卡。
  4. 在端口types中select任何一个 点击应用并确定。 现在我尝试从其他机器上工作!

我认为你需要设置端口types为任何工作。

谢谢

有可能是您的防火墙设置阻止了端口3000上的传入请求。您可能需要在此端口上添加防火墙入站规则以允许访问它。

对我来说,罪魁祸首是一个VirtualBox主机的networking接口。 此networking接口的存在导致服务器上的ipconfig报告192.168.56.1,而不是路由器分配的地址192.168.1.x。 我一直在访问错误的IP。

要删除VirtualBox主机专用networking接口,请执行以下操作:

  1. 打开VirtualBox
  2. 转到File>Preference>Network>Host-only Networks
  3. 删除有问题的适配器

你必须在terminal上运行它:

 iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT 

这里解释

就像Umamaheswaran回答的那样,需要创build一个新的入站规则。 但是,而不是使用UDP协议,我不得不使用TCP。 我的应用程序在Windows Server 2012上运行。“入站规则”在“ pipe理工具”下的“ 高级安全Windows防火墙 ”中进行设置