Probleme socket
Résolu/Fermé
chuko
-
3 juil. 2008 à 16:28
Sri Lumpa Messages postés 177 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 1 juin 2010 - 3 juil. 2008 à 17:08
Sri Lumpa Messages postés 177 Date d'inscription mercredi 14 novembre 2007 Statut Membre Dernière intervention 1 juin 2010 - 3 juil. 2008 à 17:08
A voir également:
- Probleme socket
- Socket 1150 vs 1151 - Forum Processeur
- Soulseek socket error - Forum Logiciels
- Error 2002 (hy000): can't connect to local mysql server through socket '/var/run/mysqld/mysqld.sock' (2) - Forum Linux / Unix
- Socket closed - Forum Java
- Processeur socket 775 le plus puissant ✓ - Forum Matériel & Système
6 réponses
Dinheru
Messages postés
1019
Date d'inscription
mercredi 20 avril 2005
Statut
Membre
Dernière intervention
17 avril 2009
67
3 juil. 2008 à 16:36
3 juil. 2008 à 16:36
Bonjour,
Je vais te donner le conseil qu'un professeur de programation m'a dit un jour:
"N'utilise une boucle for uniquement si tu connais le nombre d'itération à l'avance"
Ce qui ne semble pas être ton cas ;-)
Donc à la place de ton for ( que je trouve très bizard ), j'utiliserais une boucle while :
Je vais te donner le conseil qu'un professeur de programation m'a dit un jour:
"N'utilise une boucle for uniquement si tu connais le nombre d'itération à l'avance"
Ce qui ne semble pas être ton cas ;-)
Donc à la place de ton for ( que je trouve très bizard ), j'utiliserais une boucle while :
while(fgets!=NULL) { fgets(buffer,sizeof buffer,pp); }
merci d'avoir repondu malheuresement une boucle while a ete le premier reflexe que j'ai eu a utiliser et ça ne fonctionne pa malgre cela.A tu une autre idee d'ou proviendrai le probleme? merci par avance
Sri Lumpa
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
68
3 juil. 2008 à 16:51
3 juil. 2008 à 16:51
Ton for ne marchera pas, tu confonds boucle for, boucle while... Ta condition d'arrêt n'est pas valable en fait.
Soit tu utilises un for en indiquant au bout de combien d'itération la boucle doit s'arreter (par exemple si elle doit s'arrêter après avoir lu n caractère il faut que tu mettes for (compt=0 ; compt<n ; compt++)), mais ça c'est pas très conseiller dans ton cas car suppose que tu lui demande de lire 10 lignes mais que ta socket n'en contient que 8, ton programme restera bloqué en attendant les 2 dernières.
Dans ton cas, il vaut mieux utiliser un boucle while ou tu testeras à chaque itération si le résultat sorti n'indique pas encore que la fin de la chaîne est arrivé (c'est ce que tu voulais faire au départ j'ai l'impression...).
Ce que tu peux faire c'est
J'ai pas tester, mais ce bout de code va lire dans ton fichier pp tant qu'il n'est pas arrivé au bout 1024 octets, les stocker dans la chaine buffer puis les ajouter à la fin de la chain chaine_totale (fais quand même gaffe à la gestion mémoire pour tous les problèmes de dépassement possible ; j'ai mis 1024 au hasard)
Par contre, j'avoue ne pas trop comprendre ce que fais ta fonction process()
Bon courage
Soit tu utilises un for en indiquant au bout de combien d'itération la boucle doit s'arreter (par exemple si elle doit s'arrêter après avoir lu n caractère il faut que tu mettes for (compt=0 ; compt<n ; compt++)), mais ça c'est pas très conseiller dans ton cas car suppose que tu lui demande de lire 10 lignes mais que ta socket n'en contient que 8, ton programme restera bloqué en attendant les 2 dernières.
Dans ton cas, il vaut mieux utiliser un boucle while ou tu testeras à chaque itération si le résultat sorti n'indique pas encore que la fin de la chaîne est arrivé (c'est ce que tu voulais faire au départ j'ai l'impression...).
Ce que tu peux faire c'est
while(!feof(pp)){ fgets(buffer, 1024, pp); sprintf(chaine_totale, "%s%s", chaine_totale, buffer); }
J'ai pas tester, mais ce bout de code va lire dans ton fichier pp tant qu'il n'est pas arrivé au bout 1024 octets, les stocker dans la chaine buffer puis les ajouter à la fin de la chain chaine_totale (fais quand même gaffe à la gestion mémoire pour tous les problèmes de dépassement possible ; j'ai mis 1024 au hasard)
Par contre, j'avoue ne pas trop comprendre ce que fais ta fonction process()
Bon courage
merci sri lumpa d'avoir repondu je vai tester ton bout de code oui en effet ma fonction process ici ne ser pa a grand chose si ce n'est que je voulai que mon programme apelant a savoir cmd.exe ne demarre pas tant qu'une personne n'est pas connecter je n'ai trouver que cette solution.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
me revoila, je te remerci sri lumpa c'etai bien ma condition d'arrete qui fausser tout le programme en faite je vien de comprendre que je creeai une boucle infini c'est donc pour cela que ma socket ne demarai pas merci encore .
Sri Lumpa
Messages postés
177
Date d'inscription
mercredi 14 novembre 2007
Statut
Membre
Dernière intervention
1 juin 2010
68
3 juil. 2008 à 17:08
3 juil. 2008 à 17:08
Ben le problème c'est que tu utilisait comme condition d'arrêt fgets qui ici ne devait pas correspondre à ta fonction, même si elle avait le même nom... Donc en gros, tu faisait des comparaison avec une variable non-initialisée et c'est jamais franchement bon tu imagines bien :s
En tout cas, content d'avoir pu t'aider ;)
En tout cas, content d'avoir pu t'aider ;)