Node.js: не удается получить доступ к серверу с другого устройства в той же сети

ПРИМЕЧАНИЕ. Есть и другие, у которых были подобные проблемы, но они были решены путем исправления небольших лакомых кусочков кода, связанных с прослушиванием сервера (в примерах, которые я видел, они помещают "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". Когда я набираю один и тот же адрес на локальном компьютере, он отлично работает.

Я не совсем уверен, что делать. Я искренне надеюсь, что это просто глупая ошибка с моей стороны (я сожалею о том, что, возможно, трачу ваше время), а не то, что я должен зайти в свой маршрутизатор.

Большое спасибо за любую помощь.

Ответ 1

Попробуйте изменить этот

.listen(3000);

к этому

.listen(3000, "0.0.0.0");

Ответ 2

Просто поместите это здесь, если это спасет кого-нибудь еще. У меня была эта проблема в течение двух полных дней при попытке подключить мой телефон к локальной машине... и это произошло потому, что Wi-Fi на моем телефоне был отключен.

Ответ 3

Вам нужно открыть 3000 портов, чтобы можно было получить доступ с удаленных компьютеров. Вы можете сделать это в файле iptables. Используйте команду ниже для открытия файла

vi /etc/sysconfig/iptables

теперь добавьте строку ниже перед линиями отклонения в этом файле

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

Теперь перезапустите службу iptables, используя следующую команду

service iptables restart

Теперь вы перезагрузите свой сервер и повторите попытку. Он должен работать.

Ответ 4

Скорее всего, ваши настройки брандмауэра блокируют входящий запрос на порт 3000. Вы можете захотеть добавить входящее правило брандмауэра на этом порту, чтобы разрешить доступ к нему.

Ответ 5

Ниже приведен шаг, за которым последовали работы

Мой код сервера

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

Добавлены входящие правила.

  • Создал входное правило udp (поскольку я не мог найти HTTP-протокол).
  • После создания перейдите к свойствам созданного правила.
  • Выберите вкладку "Протоколы и свойства".
  • Выберите любой тип порта. Нажмите "Применить" и "ОК". Теперь я попробовал другие машина работала!!!

Я думаю, вам нужно установить Port Type для любого, чтобы он работал.

Спасибо

Ответ 6

Для меня виновником был сетевой интерфейс VirtualBox Host-only. Наличие этого сетевого интерфейса вызывало на сервере ipconfig сообщение 192.168.56.1 вместо адреса маршрутизатора 192.168.1.x. Я все время обращался к неправильному IP-адресу.

Чтобы удалить сетевой интерфейс VirtualBox Host-only:

  • Открыть VirtualBox
  • Перейдите к File>Preference>Network>Host-only Networks
  • Удалите повреждающий адаптер (ы)

Ответ 7

Вы должны запустить это на терминале:

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

Объяснение здесь

Ответ 8

Как и то, что ответил Umamaheswaran, необходимо создать новое входящее правило. Но вместо использования протокола UDP я должен использовать TCP. Мое приложение работает на Windows Server 2012. Входящие правила установлены в Брандмауэр Windows с расширенной безопасностью <Администратоp >

Ответ 9

У меня тоже была эта проблема. Я решил это, разрешив "node.js" в сетевой группе.


Решение Разрешить "node.js" через брандмауэр частной сети Windows
а. Перейти на панель управления
б. Перейти к Брандмауэру Windows
с. Нажмите "Разрешить приложение или функцию через брандмауэр Windows" на левой боковой панели
Нажмите
д. Найдите "node.js: серверный JavaScript" и убедитесь, что как открытая, так и закрытая поле столбца отмечены галочкой для "NodeJS" введите описание изображения здесь е. Нажмите "ОК", и вы закончили.