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

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.

Try changing this

.listen(3000);

to this

.listen(3000, "0.0.0.0");

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.

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

You have to run that on the terminal:

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

Explanation here

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..

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.