Home » Nodejs » Node.js: Cannot access server from different device on the same network

Node.js: Cannot access server from different device on the same network

Posted by: admin November 30, 2017 Leave a comment

Questions:

NOTE: There are some others who have had similar problems, but those were solved by fixing small tidbits in the code involving how the server was listening (in examples that I’ve seen they put ‘127.0.0.1’ as an argument in http.createServer(...).listen(). However, I do not have the same issue.

When I try to connect to my node.js server from a different machine on the same LAN network, Chrome says that it cannot connect.

This is testtesttest.js

var http = require('http');

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

When I try inputting 192.168.1.73:3000 (of course 192.168.1.73 is the ip of the machine that I’m running the server on) into the browser (Chrome, although I’ve tried other browsers as well and I have similar problems) of my other machine, it gives the error “Oops! Google Chrome could not connect to 192.168.1.73:3000”. When I type the same address onto the local machine, it works fine.

I’m not exactly sure what to do. I honestly hope this is just a stupid mistake on my part (I’m sorry for possibly wasting your time) and not something that I have to go into my router for.

Thanks very much for any help.

Answers:

Try changing this

.listen(3000);

to this

.listen(3000, "0.0.0.0");

Questions:
Answers:

Just putting this here in case it saves anyone else. I had this problem for two full days when trying to connect my phone to my local machine… and it was because the wifi on my phone was turned off.

Questions:
Answers:

You have to open 3000 port so that it can be accessed from remote machines. You can do that in iptables file. Use below command to open file

vi /etc/sysconfig/iptables

now add below line before the reject lines in that file

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

Now restart iptables service using below command

service iptables restart

Now you restart your server and try again. It should work..

Questions:
Answers:

Below is the step i followed which Worked

My server code

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

Added inbound Rules.

  1. Created a udp inbound rule(since i could’nt find any http protocol).
  2. Once created go to properties for the created rule.
  3. Choose Protocols and Properties tab.
  4. Choose any in Port Type. Click apply and Ok. Now i tried from other
    machine it worked!!!

I think you need to set Port Type to any to make it work.

Thanks

Questions:
Answers:

Chances are your firewall settings block incoming request on port 3000. You may want to add firewall inbound rule on this port to allow access to it.

Questions:
Answers:

For me, the culprit was a VirtualBox Host-only Network interface. The presence of this network interface was causing ipconfig on the server to report 192.168.56.1 instead of the router assigned address of 192.168.1.x. I was accessing the wrong IP all along.

To remove the VirtualBox Host-only Network interface:

  1. Open VirtualBox
  2. Go to File>Preference>Network>Host-only Networks
  3. Remove the offending adapter(s)
Questions:
Answers:

You have to run that on the terminal:

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

Explanation here

Questions:
Answers:

Like what Umamaheswaran answered, a new inbound rule needs to be created. But instead of using the UDP protocol, I have to use TCP. My application runs on a Windows Server 2012. The Inbound Rules are set in Windows Firewall with Advanced Security, under Administrative Tools