Envoi de classe avec send

piemur2000 Messages postés 5 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 17 juillet 2003 - 16 juil. 2003 à 19:26
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 - 17 juil. 2003 à 18:47
Bonjour,

Je voudrai envoyer une classe grace à un send.
Par exemple cette classe :

class Donnees
{

int        Type;
int        Taille;
double  **Donnees;

public:
Donnees();
virtual ~Donnees();
...
};


Si je fais :
Donnees *data = new Donnees;
send(sock, (char*)data,sizeof(data), 0);


Je ne recupere rien avec le recv.

Quelqu'un peu m'expliquer pourkoi? Ou alors me donner un exemple d'envoi d'autre chose qu'un char*.

Merci

7 réponses

Anacr0x Messages postés 515 Date d'inscription dimanche 25 mai 2003 Statut Membre Dernière intervention 27 avril 2006 2
17 juil. 2003 à 01:06
Est ce que tu est sur que le serveur doit te renvoyer quelque chose après la réception de ton paquet ? Sinon, essaye avec des char[1024] (bizarement, j'ai déja eu des problème avec les char* en socket)
Et pi tu na pas besoin de mettre "(char*)data", un "data" tout court suffit je crois
_________________________
Heureux l'étudiant qui comme la rivière peut suivre son cours sans quitter son lit
0
piemur2000 Messages postés 5 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 17 juillet 2003
17 juil. 2003 à 10:43
J'ai fait le serveur donc je c que quand je me connecte il doit m'envoyer des données contenues dans data qui est une instance de la classe Donnees. Ca marche si je lui envoi un char, mais si je veu envoyer une classe ca marche pas. Et si je ne met pas le "(char*)data" ca me fait une erreur pke data c'est pas un char*...
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
17 juil. 2003 à 11:35
Normal que ca ne marche pas, c'est un peu du n'importe quoi ce que tu essayes de faire, tu envois l'adresse de l'instance d'une classe sur une machine A et tu espères que la machine B fera quelques choses de cette adresse. Or cette adresse mémoire est une adresse dans la mémoire de la machine A, la machine B ne peut absolument rien en faire.

Si tu veux transmettre des objets via un socket, il faut que tu mettes en place le mécanisme de sérialisation. Soit tu dérives tes classes de classes MFC, soit tu utilises une bibliothèque externe ou tu la gère à la main. Ta classe ainsi sérialisée sera capable grâce à deux méthodes:

- De mettre dans un tableau de caractères (ou autre) la valeur de tous les attributs de l'instance,

- Et, à partir de cette chaine, de recréer un objet complétement identique au premier.

Quand tu auras mis en place ce mécanisme, il suffira de faire "naviguer" des chaines de caractères sur le réseau.

Kaid - kaid.fr.st
0
piemur2000 Messages postés 5 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 17 juillet 2003
17 juil. 2003 à 11:42
Ok j'veu bien mais tu peu expliquer comment faire?
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
17 juil. 2003 à 11:46
Regardes ces deux sources de vieuxLion sur la sérialisation en MFC, c'est la méthode la plus simple.

LA SÉRIALISATION MFC ACCESSIBLE EN MODE CONSOLE !!!

[http://www.cppfrance.com/article.aspx?ID=1473 LA SÉRIALISATION AVEC VC++6 [MFC] COMPRENDRE ET METTRE EN OEUVRE ]

Kaid - kaid.fr.st
0
piemur2000 Messages postés 5 Date d'inscription lundi 12 mai 2003 Statut Membre Dernière intervention 17 juillet 2003
17 juil. 2003 à 18:40
Ok merci, j'ai juste une autre petite question :
recv c'est une instruction bloquante non? tant qu'il n'a rien recu il attend?
0
cs_Kaid Messages postés 949 Date d'inscription mardi 2 octobre 2001 Statut Membre Dernière intervention 8 juillet 2006 1
17 juil. 2003 à 18:47
Oui.

Kaid - kaid.fr.st
0
Rejoignez-nous