Converteren van Class naar Char*

Status
Niet open voor verdere reacties.

erikiej1

Gebruiker
Lid geworden
29 apr 2008
Berichten
138
Ik ben bezig met een online spelletje met sockets. Ik probeer de functie send() en recv() te gebruiken om een class te versturen ( class Computer ) De prototypes van die functies zijn:

int send( SOCKET s, const char *buf, int len, int flags );
int recv( SOCKET s, char *buf, int len, int flags );

Als ik nu mijn Computer C wil versturen doe ik:

send( s, (char*) C, sizeof(C), 0 );

Of ontvangen:

recv( s, (char*) C, sizeof(C), 0 );

Maar bij beide geeft de compiler de error dat hij Computer niet kan converteren naar char*.

Weet iemand een oplossing?
 
De prototypes van die functies zijn:

int send( SOCKET s, const char *buf, int len, int flags );
int recv( SOCKET s, char *buf, int len, int flags );

Fout. De prototypes zijn:
Code:
int send( SOCKET s, const void *buf, int len, int flags );
int recv( SOCKET s, void *buf, int len, int flags );

En ja, daar zit een heel groot verschil in. Een char* is altijd een pointer naar 1 of meerdere karakters. Een void* daarentegen kan ieder datatype zijn wat jij maar wilt, in jouw geval een computer-pointer :)

In jouw geval zou je dus een pointer naar je class moeten versturen:
Code:
send( s,  &C, sizeof(C), 0 );
(niet getest)
 
Als een functie een "const char*" verwacht kun je zowel "const char*" als "char*" geven. &C levert een "Computer*" op, dus even casten: (char*)&C
 
MSDN zegt dat het een const char* en een char* zijn.

Ach ja, die gekke windows ook altijd...

Nu is het antwoord: Nee, dat kan niet met de standaard send() functie (van winsock).
Welke data wil je over sturen uit je klasse dan? Misschien dat je de variabelen 1 voor 1 over kunt zetten en dan aan de andere kant de klasse 1 voor 1 weer vullen met verstuurde data?

[edit] Wat hierboven staat (svdww) zou in principe wel moeten compileren, maar ik ben dan erg benieuwd wat windows daadwerkelijk over de lijn gaat gooien. Het zou namelijk prima kunnen dat hij alleen het adres doorstuurt (bijv 0x00223344) en voor de rest geen data. Aan dit adres heb je op de ontvangende PC natuurlijk niet echt veel aangezien dat geheugenadres op die PC hele andere data bevat :)
Maar misschien werkt het ook wel, ik ben benieuwd :)
 
Laatst bewerkt:
[edit] Wat hierboven staat (svdww) zou in principe wel moeten compileren, maar ik ben dan erg benieuwd wat windows daadwerkelijk over de lijn gaat gooien. Het zou namelijk prima kunnen dat hij alleen het adres doorstuurt (bijv 0x00223344) en voor de rest geen data. Aan dit adres heb je op de ontvangende PC natuurlijk niet echt veel aangezien dat geheugenadres op die PC hele andere data bevat :)
Maar misschien werkt het ook wel, ik ben benieuwd :)

de functie send() heeft een adres en datagrootte als argumenten, het gaat dus werken. Trust me ik heb veel ervaring met sockets ;)
 
Het werkt! bedankt.

Ik wist wel dat er EEN manier was, ik had vroeger namelijk ook al wel objects via sockets verstuurd, maar ik wist niet meer hoe...

Nogmaals bedankt.:)
 
Status
Niet open voor verdere reacties.

Nieuwste berichten

Terug
Bovenaan Onderaan