Sockets: envoi d'une structure...

cs_julien20vt Messages postés 43 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 10 novembre 2004 - 23 avril 2003 à 11:51
cs_julien20vt Messages postés 43 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 10 novembre 2004 - 25 avril 2003 à 10:48
Maintenant que j'ai réussi à envoyer des char, des int[], je voudrais envoyer un structure faite maison.
Le pb est que le socket n'accepte que les char * et que ma structure ne veut pas se laisser caster en char *.

Auriez vous une solution à me proposer ?

Le pire c'est qu'il y a quelques mois en C, j'avais fait un prog avec des sockets et je pouvais y envoyer des structures, c'est étonnant qu'en C++ ce ne soit pas possible.

4 réponses

CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
23 avril 2003 à 14:13
Il faut sérialiser ta structure cad que tu transformes les données contenues dans la structure (attention aux pointeurs: la sérialisation doit serialiser les données déréférencées) en une chaine d'octets, par ex:

struct s
{
short s;
char c1, c2;
}

char serie[4];
struct s v;

memmove(serie, &s, 4);

Core Breaker :)
0
cs_julien20vt Messages postés 43 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 10 novembre 2004
23 avril 2003 à 14:22
Je vais te décevoir, mais je n'ai pas compris ce que tu voulais dire.
Concrètement mon pb est :

j'initialise un objet de ma structure, et je veux envoyer cet objet sur un socket. Pour ce faire, il faut que je le caste en char *.

Peut-etre qu'effectivement l'union est la bonne solution pour résoudre mon pb, toujours est il que je n'ai pas compris comment il fallait que je fasse.

Désolé d'être ignorant (je le suis un peu moins chaque jour heureusement) et en tous cas merci pour l'aide.
Si tu as le courage de me réexpliquer tout ca, je suis preneur.
0
CoreBreaker Messages postés 540 Date d'inscription dimanche 23 mars 2003 Statut Membre Dernière intervention 5 octobre 2007 1
23 avril 2003 à 20:24
Le cast d'une structure en char * est impossible car les 2 types ne sont pas compatibles.
En fait sérialiser la structure revient à l'écrire dans un flux comme un fichier, comme ca:

struct s v; // une variable sur ta structure

fwrite(&v, 1, sizeof(v), fichier);

Imagine qu'à la place du flux du fichier ce soit le flux de ta socket.

Si tu veux, envoi moi le source à metaos@free.fr et je le compléterai.

Core Breaker :)
0
cs_julien20vt Messages postés 43 Date d'inscription jeudi 4 juillet 2002 Statut Membre Dernière intervention 10 novembre 2004
25 avril 2003 à 10:48
Merci, en fait c'est bon j'ai réussi à envoyer ma structure.
0
Rejoignez-nous