INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.


Antwort schreiben 

Zahl per TCP/IP-Paket senden



Wenn dein Problem oder deine Frage geklärt worden ist, markiere den Beitrag als "Lösung",
indem du auf den "Lösung" Button rechts unter dem entsprechenden Beitrag klickst. Vielen Dank!

07.09.2008, 18:56
Beitrag #1

lvgig Offline
LVF-Neueinsteiger


Beiträge: 3
Registriert seit: Sep 2008

8.5
2008
de

9126
Deutschland
Zahl per TCP/IP-Paket senden
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!
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
07.09.2008, 19:02 (Dieser Beitrag wurde zuletzt bearbeitet: 23.06.2009 10:32 von eg.)
Beitrag #2

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Zahl per TCP/IP-Paket senden
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

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.09.2008, 20:35 (Dieser Beitrag wurde zuletzt bearbeitet: 23.06.2009 10:32 von eg.)
Beitrag #3

lvgig Offline
LVF-Neueinsteiger


Beiträge: 3
Registriert seit: Sep 2008

8.5
2008
de

9126
Deutschland
Zahl per TCP/IP-Paket senden
' 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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
07.09.2008, 20:59
Beitrag #4

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Zahl per TCP/IP-Paket senden
' 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.

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.09.2008, 05:50
Beitrag #5

lvgig Offline
LVF-Neueinsteiger


Beiträge: 3
Registriert seit: Sep 2008

8.5
2008
de

9126
Deutschland
Zahl per TCP/IP-Paket senden
' 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
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
08.09.2008, 07:04 (Dieser Beitrag wurde zuletzt bearbeitet: 08.09.2008 07:04 von MikeS81.)
Beitrag #6

MikeS81 Offline
LVF-Gelegenheitsschreiber
**


Beiträge: 231
Registriert seit: Aug 2008

8.5
2005
de_en

81xxx
Deutschland
Zahl per TCP/IP-Paket senden
' 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


Angehängte Datei(en) Thumbnail(s)
   
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
Anzeige
08.09.2008, 09:38
Beitrag #7

eg Offline
LVF-SeniorMod


Beiträge: 3.868
Registriert seit: Nov 2005

2016
2003
kA

66111
Deutschland
Zahl per TCP/IP-Paket senden
' 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

Webseite des Benutzers besuchen Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren to top
30
Antwort schreiben 


Gehe zu: