LabVIEWForum.de - Zahl per TCP/IP-Paket senden

LabVIEWForum.de

Normale Version: Zahl per TCP/IP-Paket senden
Du siehst gerade eine vereinfachte Darstellung unserer Inhalte. Normale Ansicht mit richtiger Formatierung.
Hi,
ich bin neu hier und bei LabVIEW.

Habe folgendes Problem:
Ich möchte eine Zahl (von 1 bis 281474976710656) per TCP/IP-Paket (welches eine festgelegte Größe hat) senden. Allerdings kann ich mit TCP Write nur einen String senden.

Natürlich könnte ich jetzt diese Zahl als dezimalen String senden, wobei das Paket mit führenden Nullen ergänzt wird, um die definierte Größe zu erreichen.

Aber das ist doch Platzverschwendung. Mit 1 Byte kann ich 256 Zahlen ausdrücken. So müsste ich auch nur 6 Byte (statt 15 B) übertragen, wenn 281474976710656 die größtmögliche Zahl ist. Aber wie kann ich die Zahl in einen String packen, aus dem ich später auch wieder die Zahl auslesen will. Wie löse ich dann das Problem mit der definierten Stringlänge?

Dafür habe ich keine Umwandlungsfunktion gefunden. Ist das wirklich nicht vorgesehen oder muss ich mir da erst selber ein Programm basten?

Vielen Dank für jeden Tipp!
Hallo,

1. Warum soll die Größe festgelegt sein? Du kannst ja die Länge im Paket mitübertragen.
2. Du kannst die Zahl binär (nicht gleich ASCII) übertragen, dann ist die länge immer Konstant, wenn es sich um denselben Datentyp handelt.

Ansonsten probiere zuerst dieses Beispiel aus:
http://www.LabVIEWportal.eu/viewtopic.php?f=14&t=328


Gruß, eg
' schrieb:1. Warum soll die Größe festgelegt sein? Du kannst ja die Länge im Paket mitübertragen.
Wie kann man die Länge mitübertragen? Ich muss doch TCP Read genau sagen, wie viel Bytes er lesen soll.
Ich möchte aber eigentlich mehrere Werte (Dateiname, Größe, Paketanzahl etc.) in einem Paket unterbringen. Also muss ich genau wissen, von wo bis wo ein Wert anfängt.


' schrieb:Ansonsten probiere zuerst dieses Beispiel aus:
http://www.LabVIEWportal.eu/viewtopic.php?f=14&t=328
Gruß, eg
Danke. Flattern To String ist genau das, was ich gesucht habeSmile
' schrieb:Wie kann man die Länge mitübertragen? Ich muss doch TCP Read genau sagen, wie viel Bytes er lesen soll.
Ich möchte aber eigentlich mehrere Werte (Dateiname, Größe, Paketanzahl etc.) in einem Paket unterbringen. Also muss ich genau wissen, von wo bis wo ein Wert anfängt.
Danke. Flattern To String ist genau das, was ich gesucht habeSmile


Wenn du dir das Beispiel genau anschaust, dann wirst du sehen, dass die Länge des Pakets am Anfang des Pakets steht. Nun musst du zwei mal TCP Read anwenden. Ein mal um die Länge (besteht immer aus den ersten vier Bytes) der restlichen Daten auszulesen und dann so viele Bytes wie es in der Länge steht. Damit kannst du nicht nur eine Zahl übertragen. Du kannst damit alles beliebige übertragen.
' schrieb:Wenn du dir das Beispiel genau anschaust, dann wirst du sehen, dass die Länge des Pakets am Anfang des Pakets steht. Nun musst du zwei mal TCP Read anwenden. Ein mal um die Länge (besteht immer aus den ersten vier Bytes) der restlichen Daten auszulesen und dann so viele Bytes wie es in der Länge steht. Damit kannst du nicht nur eine Zahl übertragen. Du kannst damit alles beliebige übertragen.
Das ist/war genau mein Problem. Ich muss 2 TCP Pakete abschicken. Eins, das die Länge enthält und ein zweites, wo die eigentlichen Daten drin sind.
Aber ich möchte nicht 20 Pakete abschicken nur weil ich 10 Werte an den Server übertragen will.
Ich wollte eigentlich alle diese Werte in einem String packen und diesen dann als 1 TCP Paket abschicken und serverseitig den String wieder zerlegen.

Aber das Beispiel hat mir trotzdem weitergeholfen. Mit "Flattern To String" kann ich nun eine Zahl in einen Binären String umwandeln. Die Größe der Zahl wird ja automatisch durch den Datentyp (U32 -> 4 Byte) festgelegt. Auf der anderen Seite kann ich aus den Datentyp wieder eine Dezimalzahl machen.

MfG lvgig
' schrieb:Das ist/war genau mein Problem. Ich muss 2 TCP Pakete abschicken. Eins, das die Länge enthält und ein zweites, wo die eigentlichen Daten drin sind.
...

Hallo lvgig,
du mußt nicht mehrere Pakete abschicken. Du kannst auch erst die Länge der Daten ermitteln, dann in einen String umwandeln, beide Strings zusammen fassen und das dann als ein Paket abschicken. Lesen kannst du das Paket dann trotzdem in 2 oder mehreren Schritten.

Mike
' schrieb:Das ist/war genau mein Problem. Ich muss 2 TCP Pakete abschicken. Eins, das die Länge enthält und ein zweites, wo die eigentlichen Daten drin sind.
Aber ich möchte nicht 20 Pakete abschicken nur weil ich 10 Werte an den Server übertragen will.
Ich wollte eigentlich alle diese Werte in einem String packen und diesen dann als 1 TCP Paket abschicken und serverseitig den String wieder zerlegen.

Aber das Beispiel hat mir trotzdem weitergeholfen. Mit "Flattern To String" kann ich nun eine Zahl in einen Binären String umwandeln. Die Größe der Zahl wird ja automatisch durch den Datentyp (U32 -> 4 Byte) festgelegt. Auf der anderen Seite kann ich aus den Datentyp wieder eine Dezimalzahl machen.

MfG lvgig


Ja, so wird es auch funktionieren. Wenn dein Paket immer die gleiche Größe hat, dann brauchst du die Größe nicht unbedingt mitzuschicken.

Gruß, eg
Referenz-URLs