mqtt-client - Thread steigt aus, warum?

Alle Fragen zur Netzwerkkommunikation
pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

mqtt-client - Thread steigt aus, warum?

Beitrag von pluto »

Hallo

Ich bin dabei mit Lazarus ein MQTT Client zu schreiben und habe diesen Delphi Client gefunden und umgewandelt.
http://jamiei.com/blog/code/mqtt-client ... or-delphi/

Im Prinzip geht es, aber nur eine bestimmte Zeit lang, dann steigt ein Thread aus: TMQTTReadThread

Hier mal ein Ausschnitt aus dem Code:

Code: Alles auswählen

 
procedure TMQTTReadThread.Execute;
var
  CurrentMessage: TMQTTMessage;
  RLInt: Integer;
  Buffer: TBytes;
  i: integer;
begin
  while not Terminated do
    begin
      CurrentMessage.FixedHeader := 0;
      CurrentMessage.RL := nil;
      CurrentMessage.Data := nil;
      CurrentMessage.FixedHeader := FPSocket^.RecvByte(1000);
      // If we couldn't read from the socket try to read the rest of the message.
      if not ((FPSocket^.LastError <> 0) and (CurrentMessage.FixedHeader = 0)) then
        begin
          SetLength(CurrentMessage.RL, 1);
          SetLength(Buffer, 1);
          CurrentMessage.RL[0] := FPSocket^.RecvByte(1000);
          for i := 1 to 3 do
            begin
              if (( CurrentMessage.RL[i - 1] and 128) <> 0) then
              begin
                Buffer[0] := FPSocket^.RecvByte(1000);
                AppendBytes(CurrentMessage.RL, Buffer);
              end else Break;
            end;
 
          RLInt := RemainingLengthToInt(CurrentMessage.RL);
          if (RLInt > 0)  then
            begin
              SetLength(CurrentMessage.Data, RLInt);
              FPSocket^.RecvBufferEx(Pointer(CurrentMessage.Data), RLInt, 1000);
            end;
 
          if not (FPSocket^.LastError <> 0) then
            begin
              //ProcessCommand.
              FCurrentData := CurrentMessage;
              Synchronize(HandleData);
            end;
        end
        else
          if FPSocket^.LastError <> 110 then
            break;
 
   //   sleep(1);
    end;
  writeln('Fehler...', FPSocket^.LastErrorDesc);
end;
 
 


Die Fehler Meldung lautet:Connection reset by peer
Ich vermute der Sever beendet die Verbindung, aber warum? Was könnte der Grund sein?

Leider hat Google Chrome wieder den letzten Teil der Nachricht abgeschnitten, darum musste ich es noch mal machen.
Dateianhänge
plTMQTTClient.zip
(108.69 KiB) 133-mal heruntergeladen
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: mqtt-client - Thread steigt aus, warum?

Beitrag von Christian »

W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: mqtt-client - Thread steigt aus, warum?

Beitrag von pluto »

In den Beispiel fällt die lfm Datei. Außerdem ist mir SSL Wichtig.

Ich habe jedoch die mqttreadthread.pas genommen, weil die neuer war.
Aber die Verbindung wird immer noch vom Server gekappt. Gleicher Fehler.

Ich schau mal weiter, ob sich noch mehr geändert hat.

Vielleicht ist ja auch die Art und weise nicht richtig, wie ich SSL hinzugefügt habe:

Code: Alles auswählen

 
      FSocket := TTCPBlockSocket.CreateWithSSL(TSSLOpenSSL);
      FSocket.Connect(Self.FHostname, IntToStr(Self.FPort));
 
      FSocket.SSL.CertCAFile:='/home/pluto/Downloads/mainframe.io.crt';
      FSocket.SSLDoConnect;
 
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: mqtt-client - Thread steigt aus, warum?

Beitrag von pluto »

Also: Wenn ich zwischendurch ein Ping sende, steigt der Server nicht aus.

Heißt das jetzt: ich soll z.b. alle 10 oder 20 Sekunden ein Ping senden?
Kommt mir irgendwie komisch vor.

Ich habe jetzt auch die neue mqtt.pas übernommen, und dort die SSL Funktion eingebaut. Sonst kann man sich mit dem Server gar nicht verbinden.
Am Anfang sehe ich auch Daten aber nach kurzer Zeit steigt eben der Server aus. Auch mit der neuen Version.
Zuletzt geändert von pluto am Mo 16. Mai 2016, 13:37, insgesamt 1-mal geändert.
MFG
Michael Springwald

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: mqtt-client - Thread steigt aus, warum?

Beitrag von pluto »

Wenn ich alle 10 Sekunden ein PIN an den MQTT Server sende, steigt er nicht aus.

Ist das normal? Ich frage mal nach bei nächster Gelegenheit.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: mqtt-client - Thread steigt aus, warum?

Beitrag von Christian »

Ja. Er steigt nicht aus sondern kappt dir die Verbindung. Wenn du mal in die Specs schauen würdest müsstest nicht 3x nachfragen ob das normal ist :)
MQTT ist nunmal nen Message Brooker da ists wichtig das die verbundenen Clients am Leben bleiben.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: mqtt-client - Thread steigt aus, warum?

Beitrag von pluto »

Ja. Er steigt nicht aus sondern kappt dir die Verbindung. Wenn du mal in die Specs schauen würdest müsstest nicht 3x nachfragen ob das normal ist

OK. Dann ist das Verhalten Also ganz normal. Prima. Mal ehrlich, wer list schon freiwillig ein Handbuch? Außerdem Doppelt hält besser und dreifach also noch besser.
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: mqtt-client - Thread steigt aus, warum?

Beitrag von Christian »

Naja wenn du nicht gern Specs liest, ist dann programmieren wirklich so das richtige Hobby ?
Kann man Backen/Kochen ohne nen Rezept zu lesen ?
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: mqtt-client - Thread steigt aus, warum?

Beitrag von pluto »

Naja wenn du nicht gern Specs liest, ist dann programmieren wirklich so das richtige Hobby ?

Klar. Ich kann auch mit Arduino Umgehen ohne mir das Datenblatt vom atMega328 angesehen zu haben.
Programmieren kann ich natürlich auch, ohne mir alle Specs durchgelesen zu haben, die ich verwende.

Kann man Backen/Kochen ohne nen Rezept zu lesen ?

Klar. Ich sehe mir die Zutaten liste an und los geht es. Du vergleichst aber gerade Äpfel mit Birnen.
In der Regel geht es immer nur um einige Details. Auch wenn ich die Specs gelesen habe, heißt das auch das ich sie verstanden habe? Oder das ich alles "aufgenommen" habe? Vielleicht habe ich es auch überlesen.

Ist ein Forum nicht dazu da um einfach mal nachzufragen? Du musst ja nicht antworten. Keiner zwingt dich.
Nur weil du mit Programmieren dein Geld Verdienst musst du mich nicht bei jeder besten Gelegenheit "Schlecht" machen. Ich lerne immer das was ich brauche und das was ich nicht brauche, wozu sollte ich es lernen?
Aber wir weichen vom Thema ab. Die Frage ist geklärt !!!
MFG
Michael Springwald

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: mqtt-client - Thread steigt aus, warum?

Beitrag von Christian »

Mit den AVRś kann man auch nicht wirklich umgehn ohne das Datenblatt zu kennen. Gerade da kommt man nicht sehr weit ohne. Und die Atmel Datenblätter sind richtig, richtig gut geschrieben.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

pluto
Lazarusforum e. V.
Beiträge: 7178
Registriert: So 19. Nov 2006, 12:06
OS, Lazarus, FPC: Linux Mint 19.3
CPU-Target: AMD
Wohnort: Oldenburg(Oldenburg)

Re: mqtt-client - Thread steigt aus, warum?

Beitrag von pluto »

Mit den AVRś kann man auch nicht wirklich umgehn ohne das Datenblatt zu kennen. Gerade da kommt man nicht sehr weit ohne. Und die Atmel Datenblätter sind richtig, richtig gut geschrieben.

Kommt immer darauf an, was man wie machen möchte. Ich kann dir zig Platinen zeigen mit dem atMega328 mit dem atTiny85-25 oder auch mit dem Nano oder Pro Mini. Ja, man kann sogar Internet Radio über Arduino und einem "Sound" Modul machen. Geht alles. Ein PC kann auch nicht ohne Soundkarte Sound Dateien Abspielen. Jedenfalls klingen die nicht so wie wir es gewohnt sind.

Wenn du möchtest, mache ich ein neuen Thread auf mit einigen Fotos. So ein atMega328 ist leicht angeschlossen. Das Automatische Reset ist auch kein Problem oder wie ich es bei Fertigen Modulen Unterbinden kann.
Klar auf Detail fragen weiß ich vielleicht keine Antwort, aber wozu auch?
Das was FÜR mir wichtig ist, weiß ich und so lerne ich immer wieder was neues.

Klar ist es besser, die Datenblätter anzusehen aber vom atMega328 sind es über 300 Seiten im Feinsten Englisch.
Das Datenblatt vom TEA6420 oder TDA8425 habe ich mir angesehen und beim 5 Mal wusste ich auch warum es nicht geht. Weil ich NUR ein Satz überlesen habe.
Diese Datenblätter haben aber auch nur wenige Seiten und es gibt kaum Brauchbare Infos im Netzt.

Das Problem ist ein anders: Du kannst dir gerne zig 1000 Datenblätter ansehen und Studieren bis du sie Auswendig kennst, aber du brauchst die Fähigkeit zu Kombinieren und dir jedes Info zu nutze zu machen und jede menge Praktische Erfahrung. Theorie und Praxis unterscheiden sich oft.

Einmal stand ich vor einem Problem, ein Detail Problem, Ich wollte ein Sound Modul(VS1053) und ein SD Karten Modul verbinden. Das klappte aber nicht ohne weiteres. Im Internet stand die Lösung: Einfach das Sound Modul später einschalten über ein Transistor. Hättest du das gewusst?
Das Problem war: Das SD Karten Modul hat beim Starten so viel Strom gezogen, dass es das Init vom Sound Chip verhindert hat.
Danach klappte es Problem los gut die SD Karten Module haben dann den Geist aufgegeben, irgendwann.

Die einen gehen so an einem Problem heran die anderen wieder ganz anders. Es gibt viele Lösungen die zum Ziel führen, meinst du nicht auch?
Wir könnten Stunden/Wochen/Monate/Jahre Lang so weiter machen und wir würden nie einer Meinung sein. Außer in diesen Punkt vielleicht.

Du magst EDV Studiert haben(weiß ich nicht, wäre aber möglich), ich habe mir alles mühe Voll alleine beigebracht und auch oft durch Ausprobieren.

Wie ich gemerkt habe, habe ich mit den meisten "höheren" Sprachen kaum ein Problem auch wenn ich sie nicht kann. Einmal habe ich jemanden geholfen, bei einer Sprache, die ich nur vom Höhren sagen Kannte. Ich mag diese Sprache persönlich auch nicht.

Was macht es für einen Sinn, wenn man so viel weiß und es niemanden mitteilt? Es immer nur für sich zu nutzen. Ist das nicht sehr Egoistisch?
Wozu ist ein Forum deiner Meinung nach da? Das nur Anfänger einfache Fragen zum 1000 mal Stellen?

Keiner Zwingt dich hier zu Antworten. Wenn du es doch tust, ist es DEINE Entscheidung. Punk.
MFG
Michael Springwald

mschnell
Beiträge: 3444
Registriert: Mo 11. Sep 2006, 10:24
OS, Lazarus, FPC: svn (Window32, Linux x64, Linux ARM (QNAP) (cross+nativ)
CPU-Target: X32 / X64 / ARMv5
Wohnort: Krefeld

Re: mqtt-client - Thread steigt aus, warum?

Beitrag von mschnell »

Christian hat geschrieben:Naja wenn du nicht gern Specs liest, ist dann programmieren wirklich so das richtige Hobby ?



+1

-Michael

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: mqtt-client - Thread steigt aus, warum?

Beitrag von mse »

Für mich ist pluto ein Naturtalent. Was der alles mit seinen unkonventionellen Methoden hinkriegt, Hut ab!

Christian
Beiträge: 6079
Registriert: Do 21. Sep 2006, 07:51
OS, Lazarus, FPC: iWinux (L 1.x.xy FPC 2.y.z)
CPU-Target: AVR,ARM,x86(-64)
Wohnort: Dessau
Kontaktdaten:

Re: mqtt-client - Thread steigt aus, warum?

Beitrag von Christian »

Ja Martin, da muss ich dir zustimmen. Es ist echt erstaunlich wie weit er kommt. Wie weit er ohne die Methoden kommen könnte, Wow.

In dem Punkt seid ihr euch ähnlich, wenn mse-os endlich fertig ist muss ich ernsthaft überlegen alles hinzuschmeissen und mitzumachen :) In diesem Sinne dir auch etwas respektzollend.
W.m.k.A.h.e.m.F.h. -> http://www.gidf.de/

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: mqtt-client - Thread steigt aus, warum?

Beitrag von mse »

Christian hat geschrieben:wenn mse-os endlich fertig ist muss ich ernsthaft überlegen alles hinzuschmeissen und mitzumachen :)

"mse-os"? Meinst du damit MSEide+MSEgui? Das ist mindestens so fertig wie Lazarus und um mitzumachen sind alle herzlich eingeladen.

Antworten