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.