1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48
| listen(sd,MAXCLIENT);
ladcour=sizeof(adclcour);
for(;;)
{
if((nsd=accept(sd,(struct sockaddr*)&adclcour,(socklen_t*)&ladcour))<0)
{
perror(">>Probléme avec accept");
exit(1);
}
printf("nsd :: %d\n",nsd);
/* Récupération du nom du client */
if(cherche(adclcour.sin_addr.s_addr,liste_cl,nb_client)==-1)
{
printf("traitement nom\n");
FD_SET(nsd,&ensemble);
nsdbis=select(20,&ensemble,NULL,NULL,&timer);
if(nsdbis)
{
read(nsd,buf,sizeof(buf));
liste_cl[nb_client].ip=adclcour.sin_addr.s_addr;
strcpy(liste_cl[nb_client].nom,buf);
strcat(liste_cl[nb_client].nom," : ");
liste_cl[nb_client].soc=nsd;
nb_client++;
printf("%s est %s\n",(char*)inet_ntoa(liste_cl[nb_client-1].ip),liste_cl[nb_client-1].nom);
close(nsd);
}
else
{
write(nsd,"Resaisir le nom",strlen("Resaisir le nom"));
close(nsd);
}
timer.tv_sec = 5;
}
else
{
if(fork()==0)
{
/* Traitement des messages */
printf("Traitement messages\n");
close(sd);
nu_client=cherche(adclcour.sin_addr.s_addr,liste_cl,nb_client);
printf("Client considéré :: %s\n",liste_cl[nu_client].nom);
renvoi(liste_cl[nu_client].soc, liste_cl,nu_client,nb_client);
exit(0);
}
else
close(nsd); |
Partager