send und recv frage
-
Hi,
Ich habe da ein paar Fragen:
1.) Ich habe nun gemerkt das es sich mit einem Vector einfacher arbeiten lässt anstatt mit einem char array.
Die Send Funktion erwartet ja ein char array, kann ich da trozdem den vector übergeben? Weil es wäre einfacher sonst müsste ich ihn erst in ein normales array umwandeln.2.) Kann ich es beim Empfangen genauso machen?
3.) Bei recv stört mich das man eine größe angeben muss. Weil ich weiß ja nicht wie viel Daten mir der Server schickt, kann man das nicht anders machen? Sprich das man einen vector übergibt und die recv Funktion richtet sich den Speichern den sie benötigt selbst ein.Hoffe es war verständlich!
MFG ReduX :xmas1:
-
Ich hab einen Vector implementiert und einen Zeiger von diesem kann ich an OpenGL übergeben, obwohl OpenGL ein float-Array erwartet. (glVertex3fv als Bsp.)
Wie hab ich das gemacht?Ich hab operatoren definiert:
operator GLfloat* ();Ich hab 2 Methoden probiert:
Die Daten des Vectors in einem Array führen und als einzelne floats. Beide Methode funktionieren. Die letzte allerdings nur, wenn man den operator[] noch mit implementiert.
Gemacht hab ich das unter Visual C++. Inwieweit das portabel ist, hab ich noch nicht getestet.Was ich damit sagen will:
Bastel dir doch eine Klasse, die von std::vector abgeleitet ist und füge dir einfach einen casting-operator (operator char*();)hinzu. Sollte doch gehen oder?
rya.
-
&v[0]
-
Ja, du kannst einen std::vector<char> benutzen, und einfach &vec[0] beim Senden übergeben.
Und nein, der Vector füllt sich nicht automatisch, da die recv-Funktion einen statischen Buffer erwartet (daher auch die Länge), d.h. du mußt dir eine Schleife darum basteln (und am Anfang den Vector mit vec.resize(N) auf die Größe setzen).
-
Hi,
Danke für die Antworten.
Noch mal zu dem recv:
wie löst ihr das Problem mit der empfangs Größe?
Ich habe bei mir zur Zeit 4096 drin, aber wenn der server nun 5000 Zeichen schickt werden die halt nicht empfangen. Könnte man recv dann auf eine utopisch große Zahl setzen. Weil recv kehrt ja wieder zurück sobald es etwas empfangen hat. Also z.B. ist der buffer 128 Zeichen groß. Der Server schickt aber nur 32 dann kehrt die Funktion ja trozdem wieder zurück. Also könnte ich da so eine utopische Zahl reinschreiben?Noch ein schönes neues Jahr!
MFG ReduX :xmas1:
-
Schick am besten erst einen fixen Header, der die Größe beinhaltet. Dann weißt du die Gesamtgröße und kannst diese mit mehreren Bufferdurchläufen empfangen.