Envoi structure en C via socket
Fermé
RoZyk
Messages postés
78
Date d'inscription
mardi 23 février 2010
Statut
Membre
Dernière intervention
16 mars 2011
-
28 oct. 2010 à 12:20
RoZyk Messages postés 78 Date d'inscription mardi 23 février 2010 Statut Membre Dernière intervention 16 mars 2011 - 28 oct. 2010 à 17:06
RoZyk Messages postés 78 Date d'inscription mardi 23 février 2010 Statut Membre Dernière intervention 16 mars 2011 - 28 oct. 2010 à 17:06
A voir également:
- Envoi structure en C via socket
- Logiciel calcul structure bois gratuit - Télécharger - Architecture & Déco
- Mainlevée de l’envoi international ✓ - Forum Consommation & Internet
- Envoi impossible messenger - Forum Facebook Messenger
- Messenger: envoi impossible - Forum Facebook Messenger
- Partager des photos via un lien - Guide
4 réponses
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
28 oct. 2010 à 12:47
28 oct. 2010 à 12:47
met ta structure buffer stp.
RoZyk
Messages postés
78
Date d'inscription
mardi 23 février 2010
Statut
Membre
Dernière intervention
16 mars 2011
3
28 oct. 2010 à 14:37
28 oct. 2010 à 14:37
Tu crois vraiment que ma structure à quelque chose à voir avec mon problème de transmission?
struct sFich { char Buffer[512]; int finFich; }; typedef struct sFich sFich;
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
28 oct. 2010 à 15:56
28 oct. 2010 à 15:56
maintenant, non.
Mais j'ai déjà vu des gars qui voulaient envoyer des structures avec des pointeurs dedans. Comme ça, nous sommes sur ;-)
Mais j'ai déjà vu des gars qui voulaient envoyer des structures avec des pointeurs dedans. Comme ça, nous sommes sur ;-)
RoZyk
Messages postés
78
Date d'inscription
mardi 23 février 2010
Statut
Membre
Dernière intervention
16 mars 2011
3
28 oct. 2010 à 16:07
28 oct. 2010 à 16:07
Je pense avoir trouver le problème. C'est un problème de prototype de fonction, sur les tutoriels trouvaient sur internet, le prototype de send est:
Hors dans ma bibliothèque winsock2.h j'ai:
Pourrais tu regarder dans ta bibliothèque winsock2.h voir le prototype de ta fonction send? Pour savoir enfin si c'est moi qui merde ou si internet dit de la m****...
int send(int socket, void* buffer, size_t len, int flags);
Hors dans ma bibliothèque winsock2.h j'ai:
int send(int socket, char* buffer, size_t len, int flags);
Pourrais tu regarder dans ta bibliothèque winsock2.h voir le prototype de ta fonction send? Pour savoir enfin si c'est moi qui merde ou si internet dit de la m****...
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
28 oct. 2010 à 16:16
28 oct. 2010 à 16:16
Salut.
Pour savoir enfin si c'est moi qui merde ou si internet dit de la m****
ni l'un ni l'autre.
Sous windows, le prototype est bien en char*, sous Posix (Linux, Unix BSd) en void*.
J'avais deviner le windows à cause du char* ;-)
Au final, ça ne change rien, tu donne un pointeur, peu importe qu'il soit char void ou toto.
Sauf si ce gros crétin de windows vérifie s'il y a un retrou à la ligne, un espace ou un caractère nul.
Fait ce que je te conseil dans le message en dessous, en particulier les retours de send et recv. On y verra plus clair après.
Pour savoir enfin si c'est moi qui merde ou si internet dit de la m****
ni l'un ni l'autre.
Sous windows, le prototype est bien en char*, sous Posix (Linux, Unix BSd) en void*.
J'avais deviner le windows à cause du char* ;-)
Au final, ça ne change rien, tu donne un pointeur, peu importe qu'il soit char void ou toto.
Sauf si ce gros crétin de windows vérifie s'il y a un retrou à la ligne, un espace ou un caractère nul.
Fait ce que je te conseil dans le message en dessous, en particulier les retours de send et recv. On y verra plus clair après.
Char Snipeur
Messages postés
9813
Date d'inscription
vendredi 23 avril 2004
Statut
Contributeur
Dernière intervention
3 octobre 2023
1 298
28 oct. 2010 à 16:05
28 oct. 2010 à 16:05
Je ne vois pas trop d'où peut venir l'erreur.
Je n'aime pas trop l'opérateur sizeof. Essai de mettre sizeof(sFich) à la place de sizeof(buff) ; (même si c'est con, ça ne coute pas grand chose à tester)
Dans le même ordre d'idée, teste et affiche les valeurs renvoyées par send et recv. ça devrais être 516.
Si c'est ça, essai en mettant directement 516 (512*sizeof(char)/*==1*/+ sizeof(int)/*==4*/) dans send et recv.
Tiens nous au courant.
Je n'aime pas trop l'opérateur sizeof. Essai de mettre sizeof(sFich) à la place de sizeof(buff) ; (même si c'est con, ça ne coute pas grand chose à tester)
Dans le même ordre d'idée, teste et affiche les valeurs renvoyées par send et recv. ça devrais être 516.
Si c'est ça, essai en mettant directement 516 (512*sizeof(char)/*==1*/+ sizeof(int)/*==4*/) dans send et recv.
Tiens nous au courant.
RoZyk
Messages postés
78
Date d'inscription
mardi 23 février 2010
Statut
Membre
Dernière intervention
16 mars 2011
3
28 oct. 2010 à 17:06
28 oct. 2010 à 17:06
J'avais déjà essayer ta version, merci bcp pour ton aide, et le fait que ce soit char* nous posait bel et bien puisque gcc nous signalait un warning. Nous avons donc contourner le problème envoyant une chaine de caractère avec FIN en début de chaine pour signaler la fin. Et on fait un while recevoir trame tant que les 3 1er caractère sont différents de 'FIN'.
Merci bcp
Bonne fin de journée
Merci bcp
Bonne fin de journée