Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

24.06.2007, 17:07

WinSock: Structuren senden

Hallo!
Ich möchte eine kleine Netzwerk engine schreiben und benutze winsock.
Doch bei mir kann ich leider keine structuren senden (sollte das eigentlich gehen?). Kann man die Funktionen send() und recv() so wie f.read() und f.write() von fstream benutzen?
Wenn ja warum klappt das bei mir nicht?
Gruß Flo

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

2

24.06.2007, 17:32

Re: WinSock: Structuren senden

Zitat von »"F-Wölkchen"«

Doch bei mir kann ich leider keine structuren senden (sollte das eigentlich gehen?)

Ja, sollte gehen.

Zitat von »"F-Wölkchen"«

Kann man die Funktionen send() und recv() so wie f.read() und f.write() von fstream benutzen?

Ja.

Zitat von »"F-Wölkchen"«

Wenn ja warum klappt das bei mir nicht?

Weiß ich nicht.

3

24.06.2007, 17:51

ok danke!
eine frage habe ich noch.
Wie gehe ich mit void** um.
Also ich möchte eine funktion schreiben um daten die gesendet wurden zu empfangen.
Da soll man dann die zu füllende structur angeben können.
Bei tbFile habe ich gesehen das da void ** pOut benutzt wird.
Doch die Anwendung ist mir da ein bisschen unklar :roll:

Wenn ich jetzt mal eine structur habe:

C-/C++-Quelltext

1
2
3
4
5
6
struct SMe
{
int Alter;
int Groesse;
};
SMe Me;


Jetzt möchte ich die structur einfach füllen lassen:

C-/C++-Quelltext

1
Client.empfangen(&Me, sizeof(SMe));

So geht es ja nicht.

Wie dann?

Gruß Flo

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

4

24.06.2007, 17:57

Zitat von »"F-Wölkchen"«

Wie gehe ich mit void** um.

Wie mit einem Zeiger halt.

Zitat von »"F-Wölkchen"«

So geht es ja nicht.

Warum nicht?

Sorry, aber deine Fragen sind dermaßen unpräzise, da kann man gar keine gescheite Antwort geben.

Firefly

Alter Hase

Beiträge: 484

Wohnort: Irgendwoundnirgendwo

  • Private Nachricht senden

5

25.06.2007, 08:34

send, und recv können nur zeichen senden. Was macht der schlaue Programmierer also? CASTEN!!!

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

6

25.06.2007, 09:36

Achtung mit dem Senden von Strukturen. Selbst bei POD Typen ist nicht gewährleistet das die Daten an einem Stück im Speicher hinterlegt werden. Nichtmal bei Membern mit gleichen Datentyp!
Ganz zu schweigen von non POD Typen und diversem Overhead (vptr, ...). Viel Spaß beim Fehlersuchen! ;-)
@D13_Dreinig

David Scherfgen

Administrator

Beiträge: 10 382

Wohnort: Hildesheim

Beruf: Wissenschaftlicher Mitarbeiter

  • Private Nachricht senden

7

25.06.2007, 10:04

Solange er Client und Server mit demselben Compiler kompiliert, sollte das kein Problem sein, structs zu senden und zu empfangen.
Ein #pragma pack(1) kann auch nicht schaden.

David_pb

Community-Fossil

Beiträge: 3 886

Beruf: 3D Graphics Programmer

  • Private Nachricht senden

8

25.06.2007, 10:12

Eben, gleicher Compiler, padding Bytes, ... Viel zu viel Kriterien die schief laufen können. Drum sag ich ja nur: Man sollte vorsichtig sein! :-)
@D13_Dreinig

LagRange

Frischling

Beiträge: 26

Wohnort: dzt. Aalborg, DK

Beruf: Student

  • Private Nachricht senden

9

25.06.2007, 11:08

Wie siehts aus wenn man die member des structs als union mit einem Array gleicher Größe deklariert... sollten die dann nicht schön hintereinander im Speicher liegen?
Science is common sense applied to evidence.

10

25.06.2007, 13:40

Zitat von »"LagRange"«

Wie siehts aus wenn man die member des structs als union mit einem Array gleicher Größe deklariert... sollten die dann nicht schön hintereinander im Speicher liegen?

Schöner wäre eine Funktion die das manuell macht. Dann kann man wirklich sicher sein

Werbeanzeige