Skip to content Skip to sidebar Skip to footer

Android-mqtt :unable To Connect To Server (32103)

I am trying to learn basic MQTT integration in Android. I am using a mosquitto broker to publish and subscribe messages. I am running the code on a real device and getting this exc

Solution 1:

As you are getting started, you need to see see how different implementations work. Take a look at my implementation. I use a separated class for MQTT specific stuff.

MqttUtil.java

publicclassMqttUtil {
    privatestatic final StringMQTT_TOPIC = "test/topic";
    privatestatic final StringMQTT_URL = "tcp://localhost:1883";
    privatestaticboolean published;
    privatestaticMqttAndroidClient client;
    privatestatic final StringTAG = MqttUtil.class.getName();


    publicstaticMqttAndroidClientgetClient(Context context){
        if(client == null){
            String clientId = MqttClient.generateClientId();
            client =  newMqttAndroidClient(context, MQTT_URL, clientId);
        }
        if(!client.isConnected())
            connect();
        return client;
    }

    privatestaticvoidconnect(){
        MqttConnectOptions mqttConnectOptions = newMqttConnectOptions();
        mqttConnectOptions.setCleanSession(true);
        mqttConnectOptions.setKeepAliveInterval(30);

        try{
            client.connect(mqttConnectOptions, null, newIMqttActionListener() {
                @OverridepublicvoidonSuccess(IMqttToken asyncActionToken) {
                    Log.d(TAG, "onSuccess");
                }
                @OverridepublicvoidonFailure(IMqttToken asyncActionToken, Throwable exception) {
                    Log.d(TAG, "onFailure. Exception when connecting: " + exception);
                }
            });
        }catch (Exception e) {
            Log.e(TAG, "Error while connecting to Mqtt broker : " + e);
            e.printStackTrace();
        }
    }

    publicstaticvoidpublishMessage(final String payload){
        published = false;
        try {
            byte[] encodedpayload = payload.getBytes();
            MqttMessage message = newMqttMessage(encodedpayload);
            client.publish(MQTT_TOPIC, message);
            published = true;
            Log.i(TAG, "message successfully published : " + payload);
        } catch (Exception e) {
            Log.e(TAG, "Error when publishing message : " + e);
            e.printStackTrace();
        }
    }

    publicstaticvoidclose(){
        if(client != null) {
            client.unregisterResources();
            client.close();
        }
    }
}

And you can simply use it in your HomeActivity. Check it below:

publicclassHomeActivityextendsAppCompatActivity{

    @OverrideprotectedvoidonCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_main);

    // Get Mqtt client singleton instance
    MqttUtil.getClient(this);

    // Publish a sample message
    MqttUtil.publishMessage("Hello Android MQTT");
    }
}

For testing purposes, use your Mosquitto sub client and see if you get the message.

Hope that helps!

Solution 2:

try using port 8883

StringclientId= MqttClient.generateClientId();
finalMqttAndroidClientclient=newMqttAndroidClient(this.getApplicationContext(), "ssl://iot.eclipse.org:8883",
                              clientId);
try {
    MqttConnectOptionsoptions=newMqttConnectOptions();

        InputStreaminput=this.getApplicationContext().getAssets().open("iot.eclipse.org.bks");

        options.setSocketFactory(client.getSSLSocketFactory(input, "eclipse-password"));


        IMqttTokentoken= client.connect(options);
        token.setActionCallback(newIMqttActionListener() {
            @OverridepublicvoidonSuccess(IMqttToken asyncActionToken) {
                // We are connected
                Log.d(TAG, "onSuccess");

            }

            @OverridepublicvoidonFailure(IMqttToken asyncActionToken, Throwable exception) {
                // Something went wrong e.g. connection timeout or firewall problems
                Log.d(TAG, "onFailure");

            }
        });


} catch (MqttException | IOException e) {
    e.printStackTrace();
}

Post a Comment for "Android-mqtt :unable To Connect To Server (32103)"