2013-03-19 76 views
11

注意:还有一些其他人也遇到了类似的问题,但这些问题是通过在涉及服务器如何监听的代码中修复小花絮来解决的我见过他们把“127.0.0.1”作为http.createServer(...).listen()参数。但是,我并没有同样的问题。Node.js:无法从同一网络上的不同设备访问服务器

当我尝试从不同的机器连接到我的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); 

当我尝试输入192.168.1.73:3000(当然192.168.1.73是我运行服务器的机器的ip)到浏览器(Chrome浏览器,虽然我尝试了其他浏览器以及我也有类似的问题)我的另一台机器,它会给出错误“哎呀!谷歌浏览器无法连接到192.168.1.73:3000“。当我在本地机器上键入相同的地址时,它可以正常工作。

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

非常感谢您的帮助。

+0

这个日志是什么? '.listen(3000,function(){console.log(this._connectionKey)})'。另外,它不是阻止传入连接的防火墙?你能否从其他机器上的同一IP号码上的其他端口? – robertklep 2013-03-19 06:17:50

+0

它记录'未定义'。其他港口似乎也不工作。 – AbsoluteZero2A03 2013-03-19 06:34:37

+0

您是否正在运行Unix类型的操作系统?如果是这样,你可以发布这个结果(当你的Node服务器正在监听时):'netstat -an | grep LISTEN'。这将为您提供服务正在侦听的端口列表。 – robertklep 2013-03-19 06:47:44

回答

26

尝试改变这种

.listen(3000); 

to this

.listen(3000, "0.0.0.0"); 
+2

仍然没有工作,对不起。 – AbsoluteZero2A03 2013-03-19 06:41:02

+2

这对我有用!万分感谢! – AndrewJM 2014-01-26 18:51:34

+0

这也适用于我。谢谢 – agrawalankur 2015-07-24 22:45:05

2

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

+0

即使我添加像http://i.imgur.com/ROScAoJ.png这样的规则,它仍然不起作用。 – AbsoluteZero2A03 2013-03-19 15:02:57

+0

即使我关闭防火墙也不起作用 – AbsoluteZero2A03 2013-03-19 15:13:28

2

下面是步骤我跟着它曾为

我的服务器代码

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/'); 

添加入站规则。

  1. 创建一个UDP入站规则(因为我could'nt找到任何http协议)。
  2. 创建后,转到所创建规则的属性。
  3. 选择协议和属性选项卡。
  4. 选择任何端口类型。点击应用并确定。现在我尝试从其他 机器上工作!

我认为你需要设置端口类型为任何使它工作。

感谢

+0

完美,谢谢!它在我的127.0.0.1上运行,这就是为什么我无法从本地网络上的另一台机器访问。 – inf3rno 2016-02-19 16:52:36

0

你必须在终端上运行:

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

说明here

3

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

vi /etc/sysconfig/iptables 

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

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

使用以下命令

service iptables restart 

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

5

只是把它放在这里以防万一。当我尝试将手机连接到本地计算机时,我遇到了这个问题整整两天......这是因为我的手机上的wifi已关闭。

+1

哈哈哈,这是无价的。对不起,你必须经历这一点。 – 2017-01-27 18:29:16

0

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

1

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

要删除的VirtualBox仅主机网络接口:

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

我也有这个问题。 我通过在网络组中允许“node.js”解决了这个问题。


解决方案:允许 “node.js的” 通过专用网络windows防火墙
一个。转到控制面板
b。转到Windows防火墙
c。点击左侧边栏中
Click on the *Allow an app or feature through windows firewall* in the left sidebar
d允许程序通过Windows应用程序或功能的防火墙
。搜索“Node.js:服务器端JavaScript”并确保公共和专用列框中标记为“NodeJS” enter image description here e。点击“确定”,你就完成了

相关问题