Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
483 connectés 

  FORUM HardWare.fr
  Programmation
  C

  prob de transfert sur socket TCP

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

prob de transfert sur socket TCP

n°733588
damiraptor
Posté le 21-05-2004 à 14:26:06  profilanswer
 

Salut. voilà le prob:
 
j'ai deux pc en réseau et je crée un tableau dynamique constitué de chaines de caractères sur chacun d'eux:
 
char* **table;
 
sur un poste j'initialise le tableau avec des chaines et je voudrais transmettre ce tableau sur l'autre pc ou mon tableau "table" est resté vide. Pour ca j'utilise les socket. Sur le pc ou la table est mise à jour je fait un:
 
write(sock, &(**table), sizeof(char* **));
 
et sur l'autre pc je fais un:
 
read(sock_com, &(**table), sizeof(char* **));
 
Voilà, la seule chose dont je suis sur c que la connexion est bien faite  entre les deux pc et que l'écriture sur la socket se passe correctement.
Maintenant à la réception, quand je lis ma table, je m'apercois qu'elle est toujours vide (en gros elle n'a pas été écrasée par celle que j'ai recue).
 
Pourquoi et comment remédier à ca? je pense que celà peut venir du fait que la table est doublement pointée.
 
merci pour votre aide

mood
Publicité
Posté le 21-05-2004 à 14:26:06  profilanswer
 

n°733675
torpe23
Posté le 21-05-2004 à 15:04:50  profilanswer
 

Je pense que tout ton programme est faux (ton truc du triple pointeur, ça m'étonne). Il faudrait que tu montres tout le source (enfin, les parties intéressantes comme l'initialisation de ton tableau), mais en tout cas, sur ce que tu montres, le sizeof(char***) est completement faux.  
 
printf("%d\n", sizeof(char***)); -> ça donne 4
 
Bref, prend un bouquin de C et apprend!

n°733704
damiraptor
Posté le 21-05-2004 à 15:22:49  profilanswer
 

ok bah voilà un bout du code avec la création et l'initialisation du tableau:
(cependant le coup du [char* **] je l'ai trouvé sur ce forum)
 
 

Code :
  1. void creer_table()
  2. {
  3.   int i;
  4.  
  5.   table = malloc(nb_anneaux*sizeof(char **));
  6.   for(i=0; i<nb_anneaux; i++)
  7.     table[i] = malloc(nb_machines_max*sizeof(char *));
  8. }
  9. void initialiser_table()
  10. {
  11.   int i;
  12.  
  13.   for(i=0; i<nb_anneaux; i++)
  14.     {
  15.       table[i][0] = NULL;
  16.     }
  17. }
  18. int main{
  19. char* **table;
  20. creer_table();
  21. initialiser_table();
  22. .
  23. .
  24. .
  25. }

n°733994
damiraptor
Posté le 21-05-2004 à 16:44:51  profilanswer
 

je trouve nul part de solution pour mon probleme
please aidez moi

n°734096
merlin-boa
Posté le 21-05-2004 à 17:20:55  profilanswer
 

C'est portnawak le char ***table, si tu veux faire un tableau de chaine c'est char **table.
Après pour l'allocation c'est un truc du style:
 

Code :
  1. table=(char**)malloc(nb_anneaux*sizeof(char *));
  2. for(i=0;i<nb_anneaux;i++) table[i]=(char *)malloc(nb_machines_max*sizeof(char));


 
/edit: Ha j'avais pas vu ton autre topic... visiblement tu vas avoir des soucis a faire fonctionner ton truc tant que tu n'auras pas capté ce qu'est un pointeur. En plus dans ton read/write tu copie des adresses, ce qui visiblement n'est pas le but recherché.


Message édité par merlin-boa le 21-05-2004 à 17:25:30
n°734448
Rits75
to?be:!be
Posté le 22-05-2004 à 01:05:47  profilanswer
 

le probleme c'est ke tu passes tout le tableau en param a write et et hop!
deja ton tableau est mauvais c'est char **table
ensuite lorsque tu passes en param a write la taille d'octets a ecrire doit etre fausse!
essai plutot d'envoyer les chaines une a une

Code :
  1. for(i = 0; i < nbDeChaines; i++)
  2. write(fdSock, table[i], strlen(tab[i]));


Message édité par Rits75 le 22-05-2004 à 01:08:16
n°739296
MrNavarro
Posté le 26-05-2004 à 11:01:54  profilanswer
 

T'envois l'adresse du tableau en fait (ton erreur est au niveau du sizeof()). C'est pour ca que ton client retrouve rien. Faut eviter d'envoyer les pointer a double dimension par les sockets (je dis ca, mais c'est p'etre jouable de les envoyer, pour ca faudrai que tu connaisse la taille total de ton tableau et la ca serai peut etre jouable, si tu arrive dis le moi). je vote pour le for aussi. et utilise strlen() comme la dit ritz.

n°740601
Deaddy
Posté le 26-05-2004 à 19:29:04  profilanswer
 

oops une erreur de post


Message édité par Deaddy le 26-05-2004 à 19:36:09

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C

  prob de transfert sur socket TCP

 

Sujets relatifs
Petit problème avec un transfert de tableauComment passer d'une IHM en TCP à une IHM en UDP
Socket UDP (Connexion routable)Prob avec deux DIV
Socket en C++ avec gestion de stream sous Linux[socket] un socket.receive() non bloquant ....
[MYSQL] prob bizarre ma requete ne me renvoi que le premier résultatThread, prob libération mémoire
prob entre flash et internet explorer (javascript)[VB .NET]Prob de refresh avec ListBox et un Dataview
Plus de sujets relatifs à : prob de transfert sur socket TCP


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR