Forum: PC-Programmierung c# MQTT Client


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von Holger74 (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Hat jemand von Euch schon mal einen MQTT-Client in C# umgesetzt?

von void (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht lesenswert
Irgendwie fehlt mir ein richtiger Dispose von deinem Objekt.

von Holger74 (Gast)


Bewertung
0 lesenswert
nicht 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)


Bewertung
0 lesenswert
nicht 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.

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt.
Bitte hier nur auf die ursprüngliche Frage antworten,
für neue Fragen einen neuen Beitrag erstellen.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.