Подключение к серверу Android с помощью веб-сокета

Я использую брокер/сервер MQTT (это модифицированная версия moquette) на телефоне Android (Motorola Moto 3g, Android 6.0), которые принимают запрос через стандартное подключение через порт 1883 и через веб-сокет через порт 9001.

Когда я пытаюсь подключиться к серверу на том же телефоне, на котором работает сервер, с клиентом веб-сокета MQTT, все работает (с хостом 127.0.0.1 и портом 9001).

Но если я попытаюсь подключиться к серверу с моим ноутбуком, подключенным к той же локальной сети, это не удастся. То же самое, если я создаю точку доступа Wi-Fi на своем ноутбуке и подключаюсь к ней с помощью телефона.

Быстрое сканирование NMap показывает, что порт 9001 на телефоне закрыт:

Starting Nmap 7.01 ( https://nmap.org ) at 2016-06-23 12:20 CEST
Nmap scan report for 10.100.100.134
Host is up (0.0038s latency).
PORT     STATE  SERVICE
9001/tcp closed tor-orport

Nmap done: 1 IP address (1 host up) scanned in 0.05 seconds

Итак, я предполагаю, что либо сервер прослушивает неправильный интерфейс (я нашел это DEBUG io.netty.util.NetUtil - Loopback interface: lo (lo, ::1%1) в журнале adb, но, похоже, это не проблема, см. этот ответ stackoverflow) или что мне нужно вручную открыть порт на телефоне, но я ничего не нашел об этом в Google.


person Maeln    schedule 23.06.2016    source источник
comment
какое значение host указано в конфигурационном файле мечети?   -  person hardillb    schedule 23.06.2016
comment
Я использую в файле конфигурации памяти, используя класс свойств, и свойства: prop.setProperty("port", "1883"); prop.setProperty("websocket_port", "9001"); prop.setProperty("host", "127.0.0.1"); prop.setProperty("allow_anonymous", "true");   -  person Maeln    schedule 23.06.2016


Ответы (1)


Ваша проблема в том, что вы заставляете брокера слушать только петлевой интерфейс:

prop.setProperty("port", "1883"); 
prop.setProperty("websocket_port", "9001"); 
prop.setProperty("host", "127.0.0.1"); 
prop.setProperty("allow_anonymous", "true");

Вам нужно изменить его на следующее:

prop.setProperty("port", "1883"); 
prop.setProperty("websocket_port", "9001"); 
prop.setProperty("host", "0.0.0.0"); 
prop.setProperty("allow_anonymous", "true");

0.0.0.0 представляет все интерфейсы, а 127.0.0.1 — только петлевой интерфейс.

person hardillb    schedule 23.06.2016