Forum: PC-Programmierung c# MQTT Client


von Holger74 (Gast)


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();
}

von Holger74 (Gast)


Lesenswert?

Hat jemand von Euch schon mal einen MQTT-Client in C# umgesetzt?

von void (Gast)


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*/}

von Dirk (Gast)


Lesenswert?

Irgendwie fehlt mir ein richtiger Dispose von deinem Objekt.

von Holger74 (Gast)


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?

von Tek (Gast)


Lesenswert?

Es wäre schon hilfreich wenn Du erwähnen würdest was für eine MQTT 
Client Komponente du verwendest.

Wenn es wie von void vermutet der Paho Client ist würde ich mal auf 
Github ein Issue aufmachen.
Laut: https://github.com/eclipse/paho.mqtt.m2mqtt/issues/66 war da bei 
der benutzer basierten Anmeldung was im argen. Vielleicht hat das auch 
was mit deinem Problem zu tun.

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.