簡體   English   中英

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

我正在使用調用MqttWorker extends Thread{ 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);
    }
}

到目前為止我嘗試過的:

  1. 確保不要使用環回地址(這里有很多線程都是關於這個的)
  2. 確保我在AndroidManifest.xml WAKE_LOCK /INTERNET / WRITE_EXTERNAL_STORAGE / ACCESS_NETWORK_STATE設置了所需的權限
  3. 我創建了一個簡單的線程類來檢查是否可以使用socket連接到端口。 它成功了。
  4. 我使用的是MqttAndroidClient還是MqttClient並不重要。 錯誤是一樣的。

我希望有一個人可以幫助我。 我已經沒有辦法解決這個問題了。

我使用了真正的 Android 設備。 為了獲取有關網絡的更多信息,我通過adb shell連接到 Android 設備。 從 ping 命令中,我得到了以下內容From 192.192.192.1 icmp_seq=2 Destination Net Unreachable 奇怪的是,它仍然使用套接字測試工作。 總的來說,我重新啟動了設備,現在它可以工作了。 答案可能不是那么令人滿意,但至少它現在有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM