Не удается подключиться к локальному брокеру Mosquitto с реального устройства Android

#android #android-emulator #mqtt #mosquitto #paho

#Android #android-эмулятор #mqtt #mosquitto #пау

Вопрос:

Я создал брокера MQTT, используя библиотеку Mosquitto (версия — 1.6.12). и создал мобильное приложение для Android, которое действует как клиенты paho (используемые библиотеки — ‘libs/org.eclipse.paho.client.mqttv3-1.2.0.jar ‘, ‘libs/org.eclipse.paho.android.service-1.1.1.jar ‘)

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

Код Android:

         MqttAndroidClient client;
        String clientId = MqttClient.generateClientId();

        //Since broker is running in the same system I gave my local IP-ADDRESS - 192.168.0.100
        //Port - 1883

        client = new MqttAndroidClient(this.getApplicationContext(), "tcp://192.168.0.100:1883", clientId);
        try {

            MqttConnectOptions options = new MqttConnectOptions();
            options.setKeepAliveInterval(60);
            Log.d(TAG, "MqttConnectOptions : " options.toString());
            IMqttToken token = client.connect(options);

            token.setActionCallback(new IMqttActionListener() {
                @Override
                public void onSuccess(IMqttToken asyncActionToken) {
                    Log.d(TAG, "onSuccess");
                }
                @Override
                public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
                    Log.d(TAG, "onFailure ");
                    exception.printStackTrace();
                }
            });
        } catch (MqttException e) {
            e.printStackTrace();
        }
  

Журналы Android Studio:

 2020-10-06 20:27:31.775 23972-23972/com.exam.mqttwithlibs W/System.err: MqttException (0) - java.net.SocketTimeoutException: failed to connect to /192.168.0.100 (port 1883) from /192.168.0.102 (port 37459) after 30000ms
2020-10-06 20:27:31.778 23972-23972/com.exam.mqttwithlibs W/System.err:     at org.eclipse.paho.client.mqttv3.internal.ExceptionHelper.createMqttException(ExceptionHelper.java:38)
2020-10-06 20:27:31.779 23972-23972/com.exam.mqttwithlibs W/System.err:     at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:715)
2020-10-06 20:27:31.779 23972-23972/com.exam.mqttwithlibs W/System.err:     at java.util.concurrent.Executors$RunnableAdapter.call(Executors.java:458)
2020-10-06 20:27:31.779 23972-23972/com.exam.mqttwithlibs W/System.err:     at java.util.concurrent.FutureTask.run(FutureTask.java:266)
2020-10-06 20:27:31.780 23972-23972/com.exam.mqttwithlibs W/System.err:     at java.util.concurrent.ScheduledThreadPoolExecutor$ScheduledFutureTask.run(ScheduledThreadPoolExecutor.java:301)
2020-10-06 20:27:31.780 23972-23972/com.exam.mqttwithlibs W/System.err:     at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1167)
2020-10-06 20:27:31.780 23972-23972/com.exam.mqttwithlibs W/System.err:     at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:641)
2020-10-06 20:27:31.781 23972-23972/com.exam.mqttwithlibs W/System.err:     at java.lang.Thread.run(Thread.java:764)
2020-10-06 20:27:31.785 23972-23972/com.exam.mqttwithlibs W/System.err: Caused by: java.net.SocketTimeoutException: failed to connect to /192.168.0.100 (port 1883) from /192.168.0.102 (port 37459) after 30000ms
2020-10-06 20:27:31.786 23972-23972/com.exam.mqttwithlibs W/System.err:     at libcore.io.IoBridge.connectErrno(IoBridge.java:185)
2020-10-06 20:27:31.786 23972-23972/com.exam.mqttwithlibs W/System.err:     at libcore.io.IoBridge.connect(IoBridge.java:129)
2020-10-06 20:27:31.786 23972-23972/com.exam.mqttwithlibs W/System.err:     at java.net.PlainSocketImpl.socketConnect(PlainSocketImpl.java:137)
2020-10-06 20:27:31.786 23972-23972/com.exam.mqttwithlibs W/System.err:     at java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:390)
2020-10-06 20:27:31.787 23972-23972/com.exam.mqttwithlibs W/System.err:     at java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:230)
2020-10-06 20:27:31.787 23972-23972/com.exam.mqttwithlibs W/System.err:     at java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:212)
2020-10-06 20:27:31.787 23972-23972/com.exam.mqttwithlibs W/System.err:     at java.net.SocksSocketImpl.connect(SocksSocketImpl.java:436)
2020-10-06 20:27:31.788 23972-23972/com.exam.mqttwithlibs W/System.err:     at java.net.Socket.connect(Socket.java:621)
2020-10-06 20:27:31.788 23972-23972/com.exam.mqttwithlibs W/System.err:     at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:84)
2020-10-06 20:27:31.788 23972-23972/com.exam.mqttwithlibs W/System.err:     at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:701)
2020-10-06 20:27:31.788 23972-23972/com.exam.mqttwithlibs W/System.err:     ... 6 more
  

На изображении выше 192.168.0.100 — IP-адрес системы и 192.168.0.102 — IP-адрес устройства Android

Спасибо за любую помощь.

Комментарии:

1. Пожалуйста, не размещайте изображения текста ошибки, разместите фактический текст и отформатируйте его с помощью панели инструментов. Как есть, он нечитаем (особенно для людей, использующих программы чтения с экрана). Также вы проверили, что можете подключиться к брокеру с любого другого компьютера в локальной сети?

2. Я обновил журналы текстовым сообщением, спасибо за исправление. Я могу подключиться к локальному брокеру Mosquitto только через эмулятор Android

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

4. Нет, не удается подключиться с других компьютеров. Не могли бы вы пояснить, как здесь отображается брандмауэр?

5. Брандмауэр будет отбрасывать пакеты с устройства Android, попробуйте отключить брандмауэр или открыть порт 1883

Ответ №1:

Откройте порт 1883, перейдя по этой ссылке https://bytesofgigabytes.com/networking/how-to-open-port-in-windows / решает эту проблему

Ответ №2:

Если вы используете Mosquitto в качестве сервера на macOS, вам необходимо отредактировать файл конфигурации по адресу /opt/homebrew/etc/mosquitto/mosquitto.conf

 listener 1883 -- Specify port number
allow_anonymous true
  

Затем перезапустите Mosquitto