frater_sinister
Messages postés4Date d'inscriptiondimanche 18 janvier 2004StatutMembreDernière intervention 4 janvier 2007
-
18 janv. 2004 à 17:08
cs_fll
Messages postés15Date d'inscriptionvendredi 15 août 2003StatutMembreDernière intervention20 septembre 2004
-
24 févr. 2004 à 10:57
J'ai un prblm avec ce programme. Avant tout le but de ce code: le client envoit un fichier au serveur, ce dernier renvoit le nombre de lignes/mots/lettres dans le fichier. Le prblm se situe au niveau des thread je pense. Dès la première connexion, le serveur créé un thread et effectue son calcul et des que le thread quitte, la fonction se termine alors qu elle devrai rester grace à la boucle infinie en attente de nouveaux clients.
/* on accepte une seule connexion */
listen(sock,5);
for(;;){
/* attente de connexion d'un client */
sock_service = accept(sock,(struct sockaddr*)&addr_c,&x);
/* Affichage des informations sur le client*/
printf("un client connecté en local sur le port %d\\n",ntohs(addr_c.sin_port) );
/* Recuperation d'information sur le client*/
getsockname(sock,(struct sockaddr*)&temp,&x);
printf("client sur le port %d \\n",ntohs(temp.sin_port) );
/* Recuperation des informations sur le serveur */
hp = gethostbyname(argv[1]);
addr_s.sin_port = htons(atoi(argv[2]));
bcopy( (char*)hp->h_addr, (char*)&addr_s.sin_addr.s_addr, hp->h_length);
addr_s.sin_family = AF_INET;
printf("nom officiel du serveur %s\\n",hp->h_name);
Ton serveur se plante parce que tu essaies de lire/écrire sur un socket qui n'est plus valide.
Explication :
Tu devrais détruire ton socket à la sortie du thread (après avoir reçu un accusé de réception de ton client, sonon plantage du client).