Paho Mqtt Android 连接到代理失败 (32103)
Paho Mqtt Android connecting to broker fails with (32103)
我的网络中有一个 ActiveMQ 代理正在侦听 1883 (mqtt)。如果我使用简单的 Java 应用程序和 mqtt-client-0.4.0.jar 库连接到该代理,一切正常。
现在我想使用 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);
}
}
到目前为止我尝试了什么:
- 确保不使用环回地址(这里的很多线程都是关于这个的)
- 确保我在
AndroidManifest.xml
WAKE_LOCK /INTERNET / WRITE_EXTERNAL_STORAGE / ACCESS_NETWORK_STATE
中设置了所需的权限
- 我创建了一个简单的线程 class 来检查我是否可以使用 a socket 连接到端口。成功了。
- 我使用的是
MqttAndroidClient
还是 MqttClient
并不重要。错误是一样的。
希望有人能帮助我。我 运行 不知道如何解决这个问题。
我使用了真正的 Android 设备。
为了获得有关网络的更多信息,我通过 adb shell
连接到 Android 设备。从 ping 命令我得到以下信息
From 192.192.192.1 icmp_seq=2 Destination Net Unreachable
。奇怪的是,它仍然可以使用套接字测试。总的来说,我 重新启动了设备 现在它可以工作了。答案可能不是那么令人满意,但至少现在有效。
我的网络中有一个 ActiveMQ 代理正在侦听 1883 (mqtt)。如果我使用简单的 Java 应用程序和 mqtt-client-0.4.0.jar 库连接到该代理,一切正常。
现在我想使用 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);
}
}
到目前为止我尝试了什么:
- 确保不使用环回地址(这里的很多线程都是关于这个的)
- 确保我在
AndroidManifest.xml
WAKE_LOCK /INTERNET / WRITE_EXTERNAL_STORAGE / ACCESS_NETWORK_STATE
中设置了所需的权限
- 我创建了一个简单的线程 class 来检查我是否可以使用 a socket 连接到端口。成功了。
- 我使用的是
MqttAndroidClient
还是MqttClient
并不重要。错误是一样的。
希望有人能帮助我。我 运行 不知道如何解决这个问题。
我使用了真正的 Android 设备。
为了获得有关网络的更多信息,我通过 adb shell
连接到 Android 设备。从 ping 命令我得到以下信息
From 192.192.192.1 icmp_seq=2 Destination Net Unreachable
。奇怪的是,它仍然可以使用套接字测试。总的来说,我 重新启动了设备 现在它可以工作了。答案可能不是那么令人满意,但至少现在有效。