Pb avec l'utilisation des threads
Résolu/Fermé
dc.sara
Messages postés
3
Date d'inscription
samedi 8 décembre 2007
Statut
Membre
Dernière intervention
10 mars 2008
-
8 déc. 2007 à 19:48
pascal.barbier Messages postés 33 Date d'inscription samedi 8 décembre 2007 Statut Membre Dernière intervention 7 décembre 2008 - 9 déc. 2007 à 09:49
pascal.barbier Messages postés 33 Date d'inscription samedi 8 décembre 2007 Statut Membre Dernière intervention 7 décembre 2008 - 9 déc. 2007 à 09:49
A voir également:
- Pb avec l'utilisation des threads
- Notice d'utilisation - Guide
- Utilisation chromecast - Guide
- Votre compte a été désactivé pour violation de nos conditions d’utilisation - Guide
- Droit utilisation musique 30 secondes ✓ - Forum MacOS
- Matthias utilise les réseaux sociaux. que doit-il faire dans chacune des situations suivantes ? - Forum Cloud
1 réponse
pascal.barbier
Messages postés
33
Date d'inscription
samedi 8 décembre 2007
Statut
Membre
Dernière intervention
7 décembre 2008
6
9 déc. 2007 à 09:49
9 déc. 2007 à 09:49
Le problème n'est pas là où tu cherches.
Pour savoir si le buffer est vide, tu utilises if( sizeof(buffer) != 0 )
sizeof évalue la taille d'une variable et non pas son contenu
ici sizeof(buffer) renverra toujours 4 (la taille d'un pointeur en nombre d'octets).
remplaces par strlen(buffer) et ça devrait aller beaucoup mieux.
Sinon, personnellement j'aurais utilisé une autre logique :
tu as un process main qui écoute le port, accepte les connexions entrantes, lit les données et ensuite un process client qui traite les données.
Lorsque le client va faire son travail, le serveur revient à son accepte et risque de recevoir une autre connexion avant que le client n'ai terminé son job.
Pour éviter cela, j'aurais également confié au client la tâche de recevoir les données. La création de thread serait dans la boucle après accept.
La logique deviendrait :
Le serveur écoute le port et accepte les connexion. Pour chaque connexion entrante, il détache un nouveau process client.
Le process client recoit les données puis les traite. Quand il a terminé le traitement, il se suicide.
Ainsi tu es capable de traiter plusieurs connexions simultanées. La logique est plus simple à mettre en oeuvre parce qu'il n'y a pas de buffer entre le client et le serveur.
Attention : dans ce cas, il faut un buffer pour chaque client.
Pour savoir si le buffer est vide, tu utilises if( sizeof(buffer) != 0 )
sizeof évalue la taille d'une variable et non pas son contenu
ici sizeof(buffer) renverra toujours 4 (la taille d'un pointeur en nombre d'octets).
remplaces par strlen(buffer) et ça devrait aller beaucoup mieux.
Sinon, personnellement j'aurais utilisé une autre logique :
tu as un process main qui écoute le port, accepte les connexions entrantes, lit les données et ensuite un process client qui traite les données.
Lorsque le client va faire son travail, le serveur revient à son accepte et risque de recevoir une autre connexion avant que le client n'ai terminé son job.
Pour éviter cela, j'aurais également confié au client la tâche de recevoir les données. La création de thread serait dans la boucle après accept.
La logique deviendrait :
Le serveur écoute le port et accepte les connexion. Pour chaque connexion entrante, il détache un nouveau process client.
Le process client recoit les données puis les traite. Quand il a terminé le traitement, il se suicide.
Ainsi tu es capable de traiter plusieurs connexions simultanées. La logique est plus simple à mettre en oeuvre parce qu'il n'y a pas de buffer entre le client et le serveur.
Attention : dans ce cas, il faut un buffer pour chaque client.