Ich habe einen ActiveMQ-Broker in meinem Netzwerk auf 1883 (mqtt). Wenn ich mit einer einfachen Java-Anwendung und der Bibliothek mqtt-client-0.4.0.jar eine Verbindung zu diesem Broker herstelle, funktioniert alles.Paho Mqtt Android Verbindung zu Broker schlägt fehl mit (32103)
Jetzt möchte ich mit diesem Broker mit einem Android-Gerät verbinden. Leider gelingt es mir einfach nicht, eine erfolgreiche Verbindung zu bekommen. Ich bekomme immer folgende Fehlermeldung:
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
Ich verwende und Android-Service, der eine MqttWorker extends Thread{
nennt.
auch als Bibliothek Ich verwende:
compile('org.eclipse.paho:org.eclipse.paho.android.service:1.0.2') {
exclude module: 'support-v4'
}
den Code meiner Arbeiter Folgende:
@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);
}
}
Was ich versucht so weit:
- vergewissert nicht verwenden die Loopback-Adresse (viele Threads hier sind darüber)
- Sicher gemacht, dass ich hav Die erforderlichen Berechtigungen in der
AndroidManifest.xml
WAKE_LOCK /INTERNET/WRITE_EXTERNAL_STORAGE/ACCESS_NETWORK_STATE
- Ich habe eine einfache Thread-Klasse erstellt, um zu überprüfen, ob ich mit dem Port a socket verbinden kann. Es ist gelungen.
- Es spielt keine Rolle, ob ich die
MqttAndroidClient
oderMqttClient
verwende. Der Fehler ist der gleiche.
Ich hoffe jemand kann mir helfen. Ich habe keine Ideen mehr, wie ich das beheben kann.
Ist das ein echtes Android-Gerät oder der Emulator? – hardillb
Der Fehler "Keine Route zum Host" bedeutet, dass das Netzwerk, mit dem das Gerät/der Emulator verbunden ist, keine Möglichkeit hat, den Broker zu erreichen. Bitte geben Sie weitere Details zu Ihrer Netzwerkeinrichtung an (wo ist der Broker gehostet, mit welchem Netzwerk der Client verbunden ist) – hardillb