2016-04-20 13 views
1

Ich habe eine Anwendung in PyQT (UDP-Client), die einige Parameter über UDP/IP zu einer Anwendung auf Raspberry (UDP-Server) senden.Wie UDP-Client-Nachricht auf intelligente Weise an den UDP-Server zu senden parse die Nachricht

Diese Qt-Anwendung hat mehrere Felder wie PID-Parameter, Geschwindigkeit des Motors, Sensoren Presets und so weiter.

Tatsächlich sendet der UDP-Client eine Zeichenfolge, indem er die Werte von jedem Feld in der QT-Anwendung abruft und die Daten in der Zeichenfolge mit Trennzeichen (',') anfügt, immer in der gleichen Reihenfolge. Zum Beispiel "142.0, 10.0, 2.0, negativ, positiv".
Der UDP-Server empfängt diese Nachricht, teilt die Nachricht auf und verschiebt jedes Element der Liste in die entsprechende Variable.

Es funktioniert, aber es ist nicht schlau, alle Parameter werden gesendet, auch wenn einer der Parameter nicht geändert wird.

Was sollte der intelligente Weg sein, nur bestimmte Parameter zu senden, unabhängig von der richtigen Reihenfolge? oder nur die veränderten?

Vielleicht einige Protokolle über die UDP-Nachricht kapseln?

+2

Diese Frage fühlt sich für dieses Forum nicht ganz passend an. Sie erhalten wahrscheinlich Antworten, die nur von einer Meinung unterstützt werden, die jeweils gleichermaßen gültig ist. Nachdem ich das gesagt habe, würde ich JSON verwenden, damit meine Nachricht wie folgt aussehen würde: {'x': 142, 'y': 10, 'Einstellung': negativ ',' Ausblick ':' positiv '} ' –

+0

@ Robᵩ Single- In Anführungszeichen gesetzte Zeichenfolgen sind * nicht * Standard-JSON. Einige Decoder erlauben dies zwar, aber das heißt nicht, dass Sie sich wissentlich dafür einsetzen sollten, solche JSON-Ausgaben zu produzieren. Ihr Nachrichtenbeispiel sollte "{" x ": 142," y ": 10," attitude ":" negativ "," outlook ":" positiv "}' sein. –

+0

@KubaOber - Sie haben Recht. Vielen Dank. –

Antwort

1

Wenn Sie die Dinge wirklich einfach halten und den vorhandenen Code am wenigsten ändern möchten, können Sie leere Werte für Parameter mit Werten einfügen, die sich nicht geändert haben. Z.B. Wenn Sie vier Parameter haben, dann würden Sie unter der Annahme, dass alle geändert wurden, 142,10,2,negative,positive senden, aber wenn nur die ersten beiden geändert werden, senden Sie 142,10,,. Solche Ad-hoc-Programme sollten jedoch von der IMHO abgeraten werden.

Sie könnten json mit sehr kurzen Element Strings verwenden. Z.B. {"a":142,"b":10}. Sie müssten eine menschenlesbare Zuordnung zwischen den kurzen Zeichenfolgenschlüsseln und deren Bedeutung getrennt von den Daten beibehalten. Da die Zeichenfolgen ein beliebiges Unicode-Zeichen sein können, müssen Sie einen langen Weg gehen, bevor Ihnen die Verwendung einzelner Zeichen ausgeht. Auch Python natively supports json.

Wenn Sie sich nicht viel um die Länge des Pakets kümmern, benötigen Sie nicht einmal kurze Element-Strings: Machen Sie Ihre Pakete selbst-dokumentierend, indem Sie sinnvolle Strings verwenden, wie {"velocity":142,"acceleration":10}.

Verwandte Themen