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)"