Sockets: int, float, double Datentransfer
-
Hallo,
habe mir eine zyklisch (100ms) getaktete Socket Verbindung schreiben
müssen (ANSI-C) zwischen einem Client (UNIX-WS, C) und einem Server
(W2K-PC, C++).
Empfange/Sende (recv/send) z.Zt. erstmal nur einen "char" Buffer und
das funktioniert bisher alles absolut tadellos.
Nun möchte ich den Datentransfer erweitern auf "int, float, double"
Arrays und da habe ich nun die Frage(n) ob mir hier jemand auf die
Sprünge helfen kann wie die recv/send Befehle dementsprechend sich
zu ändern haben oder ob hier jemand Quellen kennt wo soetwas näher
beschrieben ist,
vielen Dank.
-
man: recv und man: send arbeiten mit void* Puffern, da kannst du theoretisch beliebige Datentypen übertragen, z.B.:
int vals[100]; send(socket,vals+start,len*sizeof(int),flags); //sendet die Elemente val[start] bis val[start+len-1] auf den Socket
-
O.K. funktioniert und unter Zuhilfenahme von "htonl" auf meiner Serverseite
bzw. "ntohl" auf meiner Clientseite kommen die Daten auch vernünftig an.Vielen Dank "CStoll"
.
-
Hallo zusammen,
ich hab mich gerade an dieses Posting erinnert, da
ich etwas ähnliches brauche...
Ist das performant so kleine Daten direkt per send zu senden?
Wird das intern noch gecached oder schickt er dann so kleine TCP-IP-Pakete?
Eigentlich muss er die doch direkt senden, sonst müßte man es doch wie
in Java flushen, oder?Gruß,
CSpille
-
es wird direkt gesendet.
deswegen machts auch sinn, ein grosses paket vorher zusammenzustueckeln und dann zu schicken oder viele kleine pakete in einem rutsch zu schicken (wenns denn was bringt).
-
Guten Morgen,
also ich sende z.Zt. von der Serverseite (W2K-PC / MS VC++ 6) 400Byte pro
100ms Zyklus, d.h. mal sende ich 100 "int" mal sende ich 100 "float", es
kommt darauf an in welchem Bereich meiner Software ich halt bin, Probleme
mit dem Timing beim Senden und Empfangen auf der Clientseite (HPUX-WS / C)
habe ich absolut nicht und könnte die Zykluszeit bei diesem Datenaufkommen
wohl noch senken, was für mich aber nicht notwendig ist.
MFG
-
so lange du wirklich 400 bytes und nicht 100 mal 4 bytes sendest, ist doch alles okay...
-
da hast Du recht, aber ich übertrage wirklich pro "send/recv" ein
400 Byte großes bzw. kleines "char" array und das reicht für max.
100 Messwerte und wie Du sagst damit ist halt alles okay ...Schönen
3. Advent
!!!
MFG
-
natürlich wird das gepuffert.