Ответ 1
Попробуйте изменить этот
.listen(3000);
к этому
.listen(3000, "0.0.0.0");
ПРИМЕЧАНИЕ. Есть и другие, у которых были подобные проблемы, но они были решены путем исправления небольших лакомых кусочков кода, связанных с прослушиванием сервера (в примерах, которые я видел, они помещают "127.0.0.1" в качестве аргумента в http.createServer(...).listen()
. Однако у меня нет такой же проблемы.
Когда я пытаюсь подключиться к моему серверу 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
(конечно, 192.168.1.73 - ip машины, на которой я запускаю сервер) в браузере (Chrome, хотя я также пробовал другие браузеры, и у меня схожая проблемы) моей другой машины, она дает ошибку "К сожалению, Google Chrome не смог подключиться к 192.168.1.73:3000". Когда я набираю один и тот же адрес на локальном компьютере, он отлично работает.
Я не совсем уверен, что делать. Я искренне надеюсь, что это просто глупая ошибка с моей стороны (я сожалею о том, что, возможно, трачу ваше время), а не то, что я должен зайти в свой маршрутизатор.
Большое спасибо за любую помощь.
Попробуйте изменить этот
.listen(3000);
к этому
.listen(3000, "0.0.0.0");
Просто поместите это здесь, если это спасет кого-нибудь еще. У меня была эта проблема в течение двух полных дней при попытке подключить мой телефон к локальной машине... и это произошло потому, что Wi-Fi на моем телефоне был отключен.
Вам нужно открыть 3000 портов, чтобы можно было получить доступ с удаленных компьютеров. Вы можете сделать это в файле iptables. Используйте команду ниже для открытия файла
vi /etc/sysconfig/iptables
теперь добавьте строку ниже перед линиями отклонения в этом файле
-A INPUT -p tcp -m tcp --dport 3000 -j ACCEPT
Теперь перезапустите службу iptables, используя следующую команду
service iptables restart
Теперь вы перезагрузите свой сервер и повторите попытку. Он должен работать.
Скорее всего, ваши настройки брандмауэра блокируют входящий запрос на порт 3000. Вы можете захотеть добавить входящее правило брандмауэра на этом порту, чтобы разрешить доступ к нему.
Ниже приведен шаг, за которым последовали работы
Мой код сервера
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/');
Добавлены входящие правила.
Я думаю, вам нужно установить Port Type для любого, чтобы он работал.
Спасибо
Для меня виновником был сетевой интерфейс VirtualBox Host-only. Наличие этого сетевого интерфейса вызывало на сервере ipconfig
сообщение 192.168.56.1 вместо адреса маршрутизатора 192.168.1.x. Я все время обращался к неправильному IP-адресу.
Чтобы удалить сетевой интерфейс VirtualBox Host-only:
File>Preference>Network>Host-only Networks
Вы должны запустить это на терминале:
iptables -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
Объяснение здесь
Как и то, что ответил Umamaheswaran, необходимо создать новое входящее правило. Но вместо использования протокола UDP я должен использовать TCP. Мое приложение работает на Windows Server 2012. Входящие правила установлены в Брандмауэр Windows с расширенной безопасностью <Администратоp >
У меня тоже была эта проблема. Я решил это, разрешив "node.js" в сетевой группе.
Решение Разрешить "node.js" через брандмауэр частной сети Windows
а. Перейти на панель управления
б. Перейти к Брандмауэру Windows
с. Нажмите "Разрешить приложение или функцию через брандмауэр Windows" на левой боковой панели
д. Найдите "node.js: серверный JavaScript" и убедитесь, что как открытая, так и закрытая поле столбца отмечены галочкой для "NodeJS"
е. Нажмите "ОК", и вы закончили.