cs_skyman272
Messages postés34Date d'inscriptionjeudi 17 juin 2004StatutMembreDernière intervention26 novembre 2007
-
11 mai 2005 à 18:36
jcqguill
Messages postés17Date d'inscriptionvendredi 29 octobre 2004StatutMembreDernière intervention19 août 2007
-
28 juin 2005 à 13:43
bonjour
voici un petit programme client/serveur pour un projet à l'insa (sous linux).
Le programme client envoi un message au programme serveur qui lui répond par l'intermediaire d'une socket.
Le pb c'est que le client envoi son message, le serveur répond, puis la communication s'arrete.
Le programme client donne le message d'erreur "broken pipe"
Si quelqu'un a une idée pour me venir en aide... Merci
if((sock=socket(AF_INET, SOCK_STREAM, 0)) == -1)
{
perror("socket"); exit(1);
}
//le bind
if(bind(sock, (struct sockaddr *)&local, sizeof(struct sockaddr)) == -1)
{
perror("bind");exit(1);
}
//Ecoute de la socket de connexion
if (listen (sock, 5) == -1)
{
perror("listen");exit(1);
}
//boucle de reponse aux requetes clients
for (;;)
{
if ((sock2=accept(sock, (struct sockaddr *)&distant, &lg)) == -1)
{
perror("accept");exit(1);
}
printf ("fin dialogue avec client \n");
//creation du processus par le fork
//le processus pere continue l'ecoute
//le processus fils va repondre pour servir les clients connectes
if ((pid=fork ()) < 0)
{
perror ("fork");
exit (1);
}
//processus pere
//ferme la connexion courante
//continue d'ecouter
if (pid > 0)
{
close (sock2);
continue;
}
//processus fils
//ferme la socket serveur
//sert la connexion courante
close (sock);
printf ("connecté avec un client \n");
while (strcmp(mess, "fin") !=0)
{
read(sock2,mess,80);
printf("%s\n",mess);
printf("entrer le message : ");
gets(mess);
write(sock2,mess,sizeof(mess)) ;
strcat(mess,'\r\n');
}
printf ("fin dialogue avec client \n");
close (sock2);
}
return 0;