P.S. Bitte lesen Sie die ganze Frage bevor Sie etwas abschließen.Verbindung verloren (32109) - java.io.EOFException (MqttAndroidClient)
Ich erhalte die folgende Ausnahme, wenn connect-Methode aufgerufen wird:
Verbindung verloren (32109) - java.io.EOFException bei org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run (CommsReceiver.java:146) bei java.lang.Thread.run (Thread.java:818) verursacht durch: java.io.EOFException bei java.io.DataInputStream.readByte (DataInputStream.java:77) bei org.eclipse.paho.client.mqttv3.internal.wire.MqttInputStream.readMqttWireMessage (MqttInputStream.java:65) bei org.eclipse.paho.client.mqttv3.internal.CommsReceiver.run (CommsReceiver.java:107)
Ich habe einige Codeschnipsel ausprobiert, aber beide heben die gleiche Ausnahme auf.
Methode 1
private final String serverUri = "tcp://95.177.135.232:9001";
private void mqqtConnectAndroidClient() {
String clientId = "clientID-" + MqttClient.generateClientId();
mqttAndroidClient = new MqttAndroidClient(getMainActivity(), serverUri, clientId);
MqttConnectOptions mqttConnectOptions = new MqttConnectOptions();
mqttConnectOptions.setKeepAliveInterval(60);
mqttConnectOptions.setCleanSession(true);
mqttConnectOptions.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1_1);
try {
mqttAndroidClient.connect(mqttConnectOptions, null, new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
subscribeToTopic();
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
AppLog.Error("Failed to connect to: " + serverUri);
exception.printStackTrace();
}
});
} catch (MqttException e) {
e.printStackTrace();
}
}
Methode 2
private final String serverUri = "tcp://95.177.135.232:9001";
private void methodTwo() {
try {
MqttDefaultFilePersistence mdfp = new MqttDefaultFilePersistence(MQTT_DIR);
mqttClient = new MqttClient(serverUri, "1", mdfp);
MqttConnectOptions options = new MqttConnectOptions();
options.setMqttVersion(MqttConnectOptions.MQTT_VERSION_3_1_1);
options.setKeepAliveInterval(60);
options.setAutomaticReconnect(true);
options.setCleanSession(true);
mqttClient.connect(options);
mqttClient.subscribe("#");
mqttClient.setCallback(new MqttCallback() {
@Override
public void connectionLost(Throwable arg0) {
AppLog.Error("Connection lost");
try {
mqttClient.connect();
} catch (MqttException e) {
e.printStackTrace();
}
}
@Override
public void deliveryComplete(IMqttDeliveryToken arg0) {
AppLog.Error("deliveryComplete");
}
@Override
public void messageArrived(String arg0, MqttMessage arg1) throws Exception {
AppLog.Error("messageArrived");
AppLog.Error(arg1.toString());
}
});
} catch (MqttException e) {
AppLog.Error("Main Exception");
e.printStackTrace();
}
}
Abonnieren Methode
public void subscribeToTopic() {
try {
String subscriptionTopic = "#";
mqttAndroidClient.subscribe(subscriptionTopic, 0, null, new IMqttActionListener() {
@Override
public void onSuccess(IMqttToken asyncActionToken) {
AppLog.Error("Subscribed!");
}
@Override
public void onFailure(IMqttToken asyncActionToken, Throwable exception) {
AppLog.Error("Failed to subscribe");
}
});
} catch (MqttException ex) {
System.err.println("Exception whilst subscribing");
ex.printStackTrace();
}
}
Wenn ich den gleichen Server URI versuchen, HiveMQ, Es funktioniert perfekt mit der richtigen Verbindung und Abonnement gibt mir auch Ergebnisse. Ich verwende die folgenden zwei Bibliotheken:
Kompilierung 'org.eclipse.paho: org.eclipse.paho.client.mqttv3: 1.1.0' Kompilierung ‚org.eclipse.paho: org.eclipse.paho .android.service: 1.0.2'
ich einige der SO Antworten versucht, mag One, Two, Three, Four und Five aber keiner von ihnen für mich arbeiten.
Jede Hilfe wird geschätzt. Vielen Dank im Voraus!
Ja, Sie haben Recht. Ich habe versucht ws: // aber mit Web-Socket-Client und in diesem Fall hat es abgelehnt. –