2013-03-19 11 views
11

UWAGA: Istnieją inne osoby, które miały podobne problemy, ale zostały rozwiązane przez naprawienie małych znaków w kodzie dotyczącym sposobu odsłuchiwania serwera (na przykład Widziałem, jak umieszczają "127.0.0.1" jako argument w http.createServer(...).listen().Jednakże nie mam tego samego problemu.Node.js: Nie można uzyskać dostępu do serwera z innego urządzenia w tej samej sieci.

Gdy próbuję połączyć się z mojego serwera node.js z innego komputera w tej samej sieci LAN sieć, Chrome, mówi, że nie może się połączyć.

to testtesttest.js

var http = require('http'); 

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

Kiedy próbuję wprowadzić 192.168.1.73:3000 (oczywiście 192.168.1.73 jest ip komputera, na którym uruchamiam serwer) do przeglądarki (Chrome, chociaż wypróbowałem także inne przeglądarki i mam podobne problemy) z mojej drugiej maszyny, daje błąd "Ups! Google Chrome nie mógł połączyć się z 192.168.1.73:3000 ". Kiedy wpisuję ten sam adres na lokalnej maszynie, to działa dobrze

Nie jestem do końca pewien co mam zrobić. Szczerze mam nadzieję, że to po prostu głupie pomyłka z mojej strony (przepraszam za ewentualnie tracić czasu), a nie coś, że muszę iść do mojego routera.

Dziękuję bardzo za pomoc.

+0

Co to za log? '.listen (3000, function() {console.log (this._connectionKey)})'. Co więcej, to nie jest zapora sieciowa, która blokuje połączenia przychodzące? Czy możesz dotrzeć do innych portów na tym samym numerze IP z innych komputerów? – robertklep

+0

Loguje 'niezdefiniowane'. Inne porty również nie działają. – AbsoluteZero2A03

+0

Czy używasz systemu operacyjnego typu Unix? Jeśli tak, czy mógłbyś opublikować wyniki tego (podczas słuchania twojego serwera Node): 'netstat -an | grep LISTEN'. To da ci listę portów, na których nasłuchują usługi. – robertklep

Odpowiedz

26

Spróbuj zmienić tę

.listen(3000); 

na to

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

Nadal nie działa, przepraszam. – AbsoluteZero2A03

+2

To zadziałało dla mnie! Dzięki za tonę! – AndrewJM

+0

To działało również dla mnie. Dzięki – agrawalankur

2

Jest szansa, że ​​ustawienia zapory blokują przychodzące żądanie na porcie 3000. Możesz dodać regułę wejściową zapory na tym porcie, aby umożliwić dostęp do niej.

+0

Nawet jeśli dodam reguły takie jak http://i.imgur.com/ROScAoJ.png, to nadal nie działa. – AbsoluteZero2A03

+0

Nawet jeśli wyłączę zaporę, to nie działa – AbsoluteZero2A03

2

Poniżej jest etap i następnie działał

mój kod serwera

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

Dodano Reguły przychodzące.

  1. Utworzono regułę wejściową udp (ponieważ nie mogłem znaleźć żadnego protokołu http).
  2. Po utworzeniu przejdź do właściwości dla utworzonej reguły.
  3. Wybierz kartę Protokoły i właściwości.
  4. Wybierz dowolny typ portu. Kliknij Zastosuj i Ok. Teraz próbowałem od innej maszyny , która zadziałała !!!

Myślę, że musisz ustawić typ portu na dowolny, aby działał.

Dzięki

+0

Doskonale, dziękuję! Był uruchomiony na moim komputerze przez 127.0.0.1, dlatego nie mogłem uzyskać dostępu z innej maszyny w sieci lokalnej. – inf3rno

0

Musisz uruchomić, że na terminalu:

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

Wyjaśnienie here

3

Musisz otworzyć port 3000 tak, że może on być dostępny z zdalnych maszynach.Możesz to zrobić w pliku iptables. Użyj poniższego polecenia można otworzyć pliku

vi /etc/sysconfig/iptables 

teraz dodać poniżej linii zanim odrzuci linie w tym pliku

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

Teraz ponownie uruchomić usługę iptables za pomocą poniższego polecenia

service iptables restart 

Teraz po ponownym uruchomieniu serwera i spróbuj ponownie. Powinno zadziałać.

5

Po prostu umieszczenie tego tutaj na wypadek, gdyby ktoś inny zapisał. Miałem ten problem przez dwa pełne dni, gdy próbowałem podłączyć mój telefon do mojego lokalnego komputera ... i to dlatego, że wifi w moim telefonie było wyłączone.

+1

Hahaha, to jest bezcenne. Przepraszam, musiałeś to przejść. –

0

Podobnie jak Umamaheswaran, należy stworzyć nową regułę. Ale zamiast używać protokołu UDP, muszę użyć TCP. Moja aplikacja działa na systemie Windows Server 2012. Reguły przychodzące są ustawione w Zapora systemu Windows z zabezpieczeniami zaawansowanymi pod Narzędzia administracyjne

1

Dla mnie winowajcą był interfejs VirtualBox Host-only Network. Obecność tego interfejsu sieciowego spowodowała, że ​​serwer ipconfig zgłosił 192.168.56.1 zamiast routera o adresie 192.168.1.x. Przez cały czas miałem dostęp do niewłaściwego adresu IP.

Aby usunąć host-only interfejsu sieciowego VirtualBox:

  1. Otwórz VirtualBox
  2. Idź do File>Preference>Network>Host-only Networks
  3. Wyjmij adapter (ów) przestępstwa
0

ja też miałem ten problem. Rozwiązałem go, umożliwiając "node.js" w grupie sieci.


Rozwiązanie: Umożliwienie "node.js" Poprzez prywatnych oknach sieciowych firewall
a. Przejdź do Panelu sterowania
b. Przejdź do Zapora systemu Windows
c. Kliknij na Pozwala aplikacji lub funkcji zapory przez okna w lewym bocznym
Click on the *Allow an app or feature through windows firewall* in the left sidebar
d. Wyszukaj "Node.js: JavaScript po stronie serwera" i upewnij się, że zarówno publiczne, jak i prywatne pole kolumn jest oznaczone jako "NodeJS" enter image description here e. Kliknij "OK" i gotowe.

Powiązane problemy