#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