У меня есть брокер ActiveMQ в своей сети, прослушивающий 1883 (mqtt). Если я подключусь к этому брокеру с помощью простого приложения Java и библиотеки mqtt-client-0.4.0.jar, все будет работать.Paho Mqtt Android, подключающийся к брокеру, не работает (32103)
Теперь я хочу подключиться к этому брокеру с помощью устройства Android. К сожалению, я просто не могу справиться с этим, чтобы получить успешную связь. Я всегда получаю следующее сообщение об ошибке:
03-23 11:08:15.679 24572-24572/com.my.package E/WorkerMQTT: onFailure: Unable to connect to server (32103) - java.net.ConnectException: failed to connect to /192.192.192.10 (port 1883) after 30000ms: isConnected failed: ENETUNREACH (Network is unreachable)
03-23 11:08:15.687 24572-24572/com.my.package W/System.err: Unable to connect to server (32103) - java.net.ConnectException: failed to connect to /192.192.192.10 (port 1883) after 30000ms: isConnected failed: ENETUNREACH (Network is unreachable)
03-23 11:08:15.695 24572-24572/com.my.package W/System.err: at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:79)
03-23 11:08:15.695 24572-24572/com.my.package W/System.err: at org.eclipse.paho.client.mqttv3.internal.ClientComms$ConnectBG.run(ClientComms.java:590)
03-23 11:08:15.695 24572-24572/com.my.package W/System.err: at java.lang.Thread.run(Thread.java:856)
03-23 11:08:15.695 24572-24572/com.my.package W/System.err: Caused by: java.net.ConnectException: failed to connect to /192.192.192.10 (port 1883) after 30000ms: isConnected failed: ENETUNREACH (Network is unreachable)
03-23 11:08:15.703 24572-24572/com.my.package W/System.err: at libcore.io.IoBridge.isConnected(IoBridge.java:224)
03-23 11:08:15.703 24572-24572/com.my.package W/System.err: at libcore.io.IoBridge.connectErrno(IoBridge.java:161)
03-23 11:08:15.703 24572-24572/com.my.package W/System.err: at libcore.io.IoBridge.connect(IoBridge.java:112)
03-23 11:08:15.703 24572-24572/com.my.package W/System.err: at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:192)
03-23 11:08:15.703 24572-24572/com.my.package W/System.err: at java.net.PlainSocketImpl.connect(PlainSocketImpl.java:459)
03-23 11:08:15.703 24572-24572/com.my.package W/System.err: at java.net.Socket.connect(Socket.java:842)
03-23 11:08:15.703 24572-24572/com.my.package W/System.err: at org.eclipse.paho.client.mqttv3.internal.TCPNetworkModule.start(TCPNetworkModule.java:70)
03-23 11:08:15.703 24572-24572/com.my.package W/System.err: ... 2 more
03-23 11:08:15.703 24572-24572/com.my.package W/System.err: Caused by: libcore.io.ErrnoException: isConnected failed: ENETUNREACH (Network is unreachable)
03-23 11:08:15.703 24572-24572/com.my.package W/System.err: at libcore.io.IoBridge.isConnected(IoBridge.java:208)
03-23 11:08:15.703 24572-24572/com.my.package W/System.err: ... 8 more
Я использую и обслуживание Android, которая вызывает MqttWorker extends Thread{
.
Также в библиотеке я использую:
compile('org.eclipse.paho:org.eclipse.paho.android.service:1.0.2') {
exclude module: 'support-v4'
}
После кода моего работника:
@Override
public void run() {
String clientId = "AndroidSub_7";
try {
this.client =
new MqttAndroidClient(this.context, "tcp://192.192.192.10:1883", clientId);
this.options = new MqttConnectOptions();
this.options.setWill("clients/clienterrors", "crashed".getBytes(),2,true); // handle uncleanly closed subscribers
this.client.setCallback(new ClientCallbacks()); // set new callbacks
this.client.connect(options);
IMqttToken conToken;
conToken = client.connect(options, this.context, new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
Log.d(TAG, "onSuccess");
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
Log.e(TAG, "onFailure: " + exception);
exception.printStackTrace();
}
});
} catch (MqttException e) {
Log.e(TAG,"Connection to broker failed:" + e);
}
}
То, что я пытался до сих пор:
- удостоверились не использовать адрес loopback (здесь много потоков)
- Убедитесь, что я hav e требуемые разрешения, установленные в
AndroidManifest.xml
WAKE_LOCK /INTERNET/WRITE_EXTERNAL_STORAGE/ACCESS_NETWORK_STATE
- Я создал простой поточный класс, чтобы проверить, могу ли я подключиться к порту с помощью a socket. Это удалось.
- Не имеет значения, пользуюсь ли я
MqttAndroidClient
илиMqttClient
. Ошибка такая же.
Я надеюсь, что кто-то может мне помочь. У меня заканчиваются идеи, как это исправить.
Это настоящее Android-устройство или эмулятор? – hardillb
Ошибка маршрута с хостом подразумевает, что сеть, к которой подключено ваше устройство/эмулятор, не имеет возможности связаться с брокером. Пожалуйста, дайте более подробную информацию о настройке сети (где размещен брокер, с какой сетью подключен клиент) – hardillb