2016-03-23 6 views
1

У меня есть брокер 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); 
    } 
} 

То, что я пытался до сих пор:

  1. удостоверились не использовать адрес loopback (здесь много потоков)
  2. Убедитесь, что я hav e требуемые разрешения, установленные в AndroidManifest.xmlWAKE_LOCK /INTERNET/WRITE_EXTERNAL_STORAGE/ACCESS_NETWORK_STATE
  3. Я создал простой поточный класс, чтобы проверить, могу ли я подключиться к порту с помощью a socket. Это удалось.
  4. Не имеет значения, пользуюсь ли я MqttAndroidClient или MqttClient. Ошибка такая же.

Я надеюсь, что кто-то может мне помочь. У меня заканчиваются идеи, как это исправить.

+0

Это настоящее Android-устройство или эмулятор? – hardillb

+0

Ошибка маршрута с хостом подразумевает, что сеть, к которой подключено ваше устройство/эмулятор, не имеет возможности связаться с брокером. Пожалуйста, дайте более подробную информацию о настройке сети (где размещен брокер, с какой сетью подключен клиент) – hardillb

ответ

1

Я использовал настоящее Android-устройство. Чтобы получить дополнительную информацию о сети, я подключился к устройству Android за adb shell. Из команды ping я получил следующее: From 192.192.192.1 icmp_seq=2 Destination Net Unreachable. Странно, так что он все еще работал с использованием теста сокета. В целом, я перезапустил устройство, и теперь он работает. Ответ может быть не настолько удовлетворительным, но, по крайней мере, он работает сейчас.

+0

Проверьте свой брандмауэр, возможно, это блокирует соединение – Clocker

 Смежные вопросы

  • Нет связанных вопросов^_^