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 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129
|
void ecoute(void)
{
sigset_t ens , ens_old;
struct sockaddr_in mon_address, client_address;
int mon_address_longueur, lg=512;
char nom_utilisateur[MAX_CARACT];
char etat[MAX_CARACT];
strcpy(connexion,"non connecté");
test=0;
printf("INITIALISATION\n");
bzero(&mon_address,sizeof(mon_address));
mon_address.sin_port = htons(PORT);
mon_address.sin_family = AF_INET;
mon_address.sin_addr.s_addr = htonl(INADDR_ANY);
/* creation de socket */
if ((ma_socket = socket(AF_INET,SOCK_STREAM,0))== -1)
{
printf("Problème avec la creation\n");
exit(0);
}
sigfillset(&ens);
sigdelset(&ens , SIGINT);
sigdelset(&ens , SIGCHLD);
sigprocmask(SIG_SETMASK , &ens , &ens_old ) ;
action.sa_handler = SIGCHLD_handler;
action.sa_mask = ens;
action.sa_flags = SA_RESTART;
if ( sigaction(SIGCHLD , &action , NULL) == -1 )
{
perror("sigaction");
exit(1);
}
setbuf(stdout, NULL);
setbuf(stdin, NULL);
signal(SIGINT, SIGINT_handler);
signal(SIGCHLD , SIGCHLD_handler);
bind(ma_socket,(struct sockaddr *)&mon_address,sizeof(mon_address));
while(1)
{
/* ecoute sur la socket */
listen(ma_socket,LISTE_ATTENTE);
/* accept la connexion */
mon_address_longueur = sizeof(client_address);
sleep(1);
printf("ETAT DU BUFFER: '%s' ; ETAT DE CONNEXION: '%s' et test = %d \n",buffer,connexion,test);
printf("Etape 0 et %s et client socket=%d et lg=%d et masocket=%d\n",connexion,client_socket,lg,ma_socket);
client_socket = accept(ma_socket,
(struct sockaddr *)&client_address,
(struct sockaddr *)&mon_address_longueur);
printf("Etape 1 et %s et adresse du client = %s\n",connexion,inet_ntoa(client_address.sin_addr));
/* ********************************************************
***************** Reception des données*********************
************************************************************/
if (fork() == 0)
{
lg = read(client_socket,buffer, MAX_CARACT);
printf("Le client envoit le mot :'%s' et il est %s\n",buffer,connexion);
/****************************Enregistrer les données du client dans le serveur*******************************/
if(!strcmp(connexion, "demande_etat"))
{
strcpy(etat,buffer);
strcpy(connexion,"connecté");
test=2;
printf("Etat de l'utilisateur : %s\n",etat);
}
if(!strcmp(connexion, "demande_pseudo"))
{
strcpy(nom_utilisateur,buffer);
strcpy(connexion,"demande_etat");
test=3;
printf("Nom d'utilisateur : %s\n",nom_utilisateur);
}
if(!strcmp(buffer, "connexion") && !strcmp(connexion, "non connecté") )
{
printf("Etat?\n");
strcpy(connexion,"demande_pseudo");
test=1;
printf("Affichage de i : %s\n",connexion);
}
write(client_socket,buffer, MAX_CARACT);
}
}
}
void SIGCHLD_handler(void)
{
printf("Etape 9 et %s\n",connexion);
wait(NULL);
printf("Etape 10 et %s\n",connexion);
printf("fils mort\n");
}
void SIGINT_handler(void)
{
printf("SIGINT\n");
if ( shutdown(ma_socket , 2)==-1){
perror("shutdown");
}
else
close(ma_socket);
exit(0);
} |
Partager