c# MQTT Client

Gast #5355659
Lesenswert?

Vielleicht kann mir jemand helfen...

Mit dem Programm verbinde ich mich mit einem MQTTBroker.
Solange der richtige BenutzerName und das Passwort benutzt werden ist 
alles in Ordnung.
Wenn ich so wie hier einen falschen Benutzernamen und ein falsches 
Passwort verwende, wird der Prozess beim Schließen des Programms nicht 
beendet.

Woran liegt das und wie kann man das beheben?

public Form1()
{
  InitializeComponent();

  try
  {
    mClient = new MqttClient("starDeko");
    mClient.MqttMsgPublishReceived += client_MqttMsgPublishReceived;
    clientId = Guid.NewGuid().ToString();
    byte x = mClient.Connect(clientId,"user2","passwd1",false,3);
    if (!mClient.IsConnected)
    {
     textBox1.Text += x.ToString() + " nicht verbunden !!!\n";
     mClient.Disconnect();
    }
   }
   catch(Exception)
   {}
  }
}

private void Form1_FormClosed(object sender, FormClosedEventArgs e)
{
    if (mClient != null)
       if (mClient.IsConnected)
          mClient.Disconnect();
}
Gast #5358023
Lesenswert?

Holger74 schrieb:
> MQTT-Client in C#

Dein Code sieht verdammt nach dem Paho MQTT Client für C# (M2Mqtt) aus.
Nein, leider keine praktische Erfahrung damit. Paho MQTT Client für C 
und Paho MQTT für JS habe ich schon benutzt.

Was mir bei kurzem drauf schauen auf die Paho C# Webseiten[1] auffällt 
ist, dass es zwar die gleichen kurzen Pseudo-Code Schnipsel gibt wie für 
Paho C, aber nicht die passend kurzen Code Beispiele.
Hab ich die einfachen Beispiele übersehen? (Beim Paho C im Ordner: 
./paho.mqtt.c/src/samples/ MQTTClient_publish.c + 
MQTTClient_subscribe.c)

[1]
https://www.eclipse.org/paho/clients/dotnet/
https://github.com/eclipse/paho.mqtt.m2mqtt/tree/master/M2Mqtt
https://m2mqtt.wordpress.com/using-mqttclient/


Einfach mal kurz geraten.

  > catch(Exception)

Bis du sicher, dass sich die Exceptions nicht in die Quere kommen? In 
der Implementierung von mClient.Connect() selbst wird die Exception 
MqttConnectionException(...) geworfen.


  > client_MqttMsgPublishReceived

Eine passende Methode hast du hoffentlich auch implementiert?
void client_MqttMsgPublished(object sender, MqttMsgPublishedEventArgs e) 
{ /*your code here*/}
Gast #5362150
Lesenswert?

Vielen Dank für Eure Hilfe.
Ich komme trotzdem nicht weiter. Das try/catch ist entfernt und eine 
client_MqttMsgPublished(...) existiert auch. Connect gibt den richtigen 
Fehlercode ("bad username...") zurück. Das Form läßt sich schließen, nur 
der Prozess bleibt noch vorhanden. Das gleiche passiert auch bei einem 
connect ohne username und password. Ich habe auch noch kein Beispiel 
gesehen, wo der Erfolg von connect abgefragt wird und was passiert, wenn 
das connect fehlschlägt.
Wo kann man den Fehler noch suchen?

Wie sieht ein richtiger Dispose für das Objekt aus?

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren