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

时间:2013-03-19 06:08:32

标签: node.js

注意:还有一些其他人遇到过类似的问题,但是通过修复涉及服务器监听方式的代码中的小花絮来解决这些问题(在我已经看过他们放置的示例中,#127; 127.0。 0.1'作为http.createServer(...).listen()中的参数。但是,我没有相同的问题。

当我尝试从同一LAN网络上的其他计算机连接到我的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(当然是我运行服务器的机器的IP地址为192.168.1.73)输入浏览器时(Chrome,虽然我已尝试过其他浏览器)我的其他机器也有类似的问题,它给出了错误"哎呀! Google Chrome无法连接到192.168.1.73:3000"。当我在本地机器上键入相同的地址时,它工作正常。

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

非常感谢您的帮助。

11 个答案:

答案 0 :(得分:28)

尝试更改此

.listen(3000);

到这个

.listen(3000, "0.0.0.0");

答案 1 :(得分:8)

将它放在这里,以防它拯救其他任何人。尝试将手机连接到本地机器时,我有两天这个问题...这是因为手机上的wifi被关闭了。

答案 2 :(得分:3)

以下是我所遵循的工作步骤

我的服务器代码

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入站规则(因为我无法找到任何http协议)。
  2. 创建后,转到已创建规则的属性。
  3. 选择“协议和属性”选项卡。
  4. 在“端口类型”中选择任意一项。单击“应用”和“确定现在我尝试了其他的 机器工作!!!
  5. 我认为你需要将Port Type设置为any以使其正常工作。

    由于

答案 3 :(得分:3)

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

vi /etc/sysconfig/iptables

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

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

现在使用以下命令

重启iptables服务
service iptables restart

现在重新启动服务器并重试。它应该工作..

答案 4 :(得分:2)

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

答案 5 :(得分:2)

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


解决方案:允许“node.js”通过专用网络窗口防火墙
一个。转到控制面板
湾转到Windows防火墙
C。单击左侧边栏中的通过Windows防火墙允许应用程序或功能 Click on the *Allow an app or feature through windows firewall* in the left sidebar
d。搜索“Node.js:Server Side JavaScript”并确保公共和私有列框都标记为“NodeJS” enter image description here 即点击“确定”即可完成

答案 6 :(得分:1)

对我来说,罪魁祸首是VirtualBox Host-only Network界面。此网络接口的存在导致服务器上的adb shell su 报告192.168.56.1而不是路由器分配的地址192.168.1.x.我一直在访问错误的IP。

删除VirtualBox仅主机网络接口:

  1. 打开VirtualBox
  2. 转到ipconfig
  3. 删除有问题的适配器

答案 7 :(得分:1)

我的问题是,我已经使用分配给以太网适配器的IP而不是 wifi适配器 ......

现在,当我从任何设备连接时,它都能正常工作。

答案 8 :(得分:0)

你必须在终端上运行它:

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

解释here

答案 9 :(得分:0)

就像Umamaheswaran所回答的那样,需要创建一个新的入站规则。但我不是使用UDP协议,而是使用TCP。我的应用程序在Windows Server 2012上运行。入站规则在管理工具

下的具有高级安全性的Windows防火墙中设置

答案 10 :(得分:0)

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

我在网络设置上找到了我的IPv4地址,然后以监听的乐趣进行指定。也放3000端口。我可以通过连接了相同wifi的平板电脑访问http://192.168.1.36:3000/