Подключить сервер websocket по IP-адресу локальной сети

Я установил чат с веб-чатами с целью обучения. Все работает, но я не могу понять эту проблему.

Когда я поставляю 127.0.0.1 в качестве адреса соединения на стороне клиента, я могу получить доступ к серверу с компьютера, на котором он находится, но когда я меняю адрес на фактический адрес LAN хостингового компьютера, t подключить сервер даже от самого хоста. См:

Server = new FancyWebSocket('ws://127.0.0.1:9300'); Появляется на работе, но только компьютер, на котором размещается сервер, может подключаться (по понятным причинам)

Server = new FancyWebSocket('ws://192.168.1.3:9300'); Невозможно подключить компьютеры. Я подтверждаю, что 192.168.1.3 - это адрес LAN хостингового компьютера.

Какой адрес мне нужно добавить туда, чтобы подключить другие компьютеры из моей локальной сети?

Ответ 1

Я решил проблему. Поскольку это была комбинация двух ответов, я думал, что единственное, что нужно сделать, это добавить еще один ответ с объяснением.

Как предложил @Mehran, у меня был адрес сервера, настроенный как 127.0.0.1 вместо сетевого адреса. После изменения этого параметра на 192.186.1.3 мне удалось подключиться с самого сервера, но другим машинам не удалось подключиться. Затем я сделал шаги из руководства, приведенного в @vtortola, чтобы добавить новое правило входа в брандмауэр сервера, чтобы этот порт использовался.

Итак, теперь все работает, спасибо за помощь. + rep всем!

Ответ 2

Я уверен, что это связано с конфигурацией вашего сервера WebSocket. Он должен слушать localhost (127.0.0.1), чтобы принимать входящие соединения, и в этом случае он не будет отвечать на те, которые нацелены на 192.168.1.3.

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

Ответ 3

Он выглядит как проблема с брандмауэром/политикой.

Ваш TCP 80 может быть разрешен, так как установка IIS откроет его, что объяснит, почему работает обычный просмотр веб-страниц. Но вы пытаетесь подключиться к TCP 9300, что очень маловероятно, что разрешено по умолчанию.

Попробуйте следующее: Как открыть порт в брандмауэре Windows 7 и разрешить этот порт.

Ответ 4

Вот некоторые вещи, которые можно смело предположить при устранении этой проблемы:

  • Если служба может работать на 127.0.0.1 на одном компьютере, вы можете предположить, что проблема не в коде или конфигурации PHP

  • Если вы не получаете сообщение об ошибке, когда сервер пытается привязать к 192.168.1.3:9003, вы можете спокойно предположить, что служба работает. Попробуйте открыть монитор ресурсов, чтобы проверить, действительно ли он прослушивает этот порт для подтверждения. Для этого перейдите в "Меню" Пуск "в Windows и введите" Монитор ресурсов "в поле" Поиск программ и файлов ". После открытия монитора ресурсов перейдите на вкладку" Обзор "и найдите имя процесса сервера (обычно" php ", если вы используете CLI). Выбрав выбранный процесс, перейдите на вкладку" Сеть ", и вы сможете узнать, прослушивает ли он какие-либо порты на панели" Соединения TCP". Это покажет вам, какой адрес и порт он перечисляет, а также удаленный адрес и порт любых клиентов, подключенных к службе.

  • Если вы знаете, что сервер работает, и вы знаете, что он активно прослушивает ожидаемый адрес и порт, это очень вероятно, проблема с брандмауэром в Windows или маршрутизаторе. Обратите внимание, что даже если 192.168.1.3 является IP-адресом, назначенным вашему интерфейсу, это не локальный IP-адрес, и вся связь с и из 192.168.1.3 будет по-прежнему проходить через брандмауэр Windows, в том числе при отправке на тот же компьютер. Если вы уже на этом этапе, я настоятельно рекомендую сначала проверить ваш брандмауэр Windows. Если это не брандмауэр Windows, проверьте маршрутизатор, чтобы убедиться, что он заблокировал порт, а также проверьте перенаправление портов и другие настройки, чтобы убедиться, что маршрутизатор не мешает другим. Вероятно, мы можем помочь вам в решении проблем с маршрутизаторами, но ваш ручной маршрутизатор удобен.

HTTP - это общий служебный порт, поэтому очень возможно, что маршрутизатор не блокирует порт, и окна могут автоматически открывать его, если вы используете IIS. 9300 не является общим портом, поэтому он вряд ли будет открыт по умолчанию в любой ситуации, если только ваш по умолчанию не "все в одном", что фактически означает, что вы не используете брандмауэр.

Еще одна вещь, которую вы можете попробовать (если возможно), закрыть ваш существующий HTTP-сервис и связать с портом 80 с помощью службы Websocket или, если это возможно (и при проявлении осторожности) полностью отключить брандмауэр Windows, чтобы убедиться, что он работает достаточно долго для подключения.

Ответ 5

В общем, не пытайтесь достичь своего IP-адреса локальной сети с вашей собственной машины. Есть очень запутывающие вещи, которые происходят на слое сокета здесь, и я постараюсь не слишком заглядывать. ОС делает все возможное, чтобы сделать эту работу. Иногда. Я ожидаю, что вы не сможете достичь 192.168.1.3 (сервера, который я предполагаю) от себя. Там есть перевод между локальными адресами конечных точек, когда вы делаете то, что усложняет все.

Сетевой коммутатор, как правило, не отправляет фрейм обратно на порт, из которого он только что получил, поэтому то, что вы видите, когда вы проверяете свой локальный IP-адрес в приглашении cmd, это ярлык loopback, который принимает ОС.

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

К сожалению, я не могу быть более целевым с моим ответом, поскольку я не знаком с тем, что такое FancyWebSocket или как он построен.

Ответ 6

Я могу вам помочь, если его Linux-система.

Если в локальной сети нет сервера имен, все же можно установить небольшую таблицу, отображающую IP-адреса и имена компьютеров в файле /etc/hosts, обычно зарезервированном для локальных сетевых станций.

Этот файл доступен даже во время сбоев в сети или когда DNS-серверы недоступны, но будут действительно полезны только при дублировании на всех компьютерах в сети. Малейшее изменение в корреспонденции потребует обновления файла везде. Вот почему /etc/hosts обычно содержат только самые важные записи.

Этот файл будет достаточным для небольшой сети, не подключенной к Интернету, но с 5 машинами или более, рекомендуется установить надлежащий DNS-сервер.

Попробуйте добавить все "ip: port" вместе с именем хоста и скопировать шаблон в файл /etc/hosts во всей системе.

Надеюсь, что он решает проблему!