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站规则。
- 创build一个udp入站规则(因为我不能find任何http协议)。
- 创build后,转到创build的规则的属性。
- select“协议和属性”选项卡。
- 在端口types中select任何一个 点击应用并确定。 现在我尝试从其他机器上工作!
我认为你需要设置端口types为任何工作。
谢谢
有可能是您的防火墙设置阻止了端口3000上的传入请求。您可能需要在此端口上添加防火墙入站规则以允许访问它。
对我来说,罪魁祸首是一个VirtualBox主机的networking接口。 此networking接口的存在导致服务器上的ipconfig
报告192.168.56.1,而不是路由器分配的地址192.168.1.x。 我一直在访问错误的IP。
要删除VirtualBox主机专用networking接口,请执行以下操作:
- 打开VirtualBox
- 转到
File>Preference>Network>Host-only Networks
- 删除有问题的适配器
你必须在terminal上运行它:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
这里解释
就像Umamaheswaran回答的那样,需要创build一个新的入站规则。 但是,而不是使用UDP协议,我不得不使用TCP。 我的应用程序在Windows Server 2012上运行。“入站规则”在“ pipe理工具”下的“ 高级安全Windows防火墙 ”中进行设置