-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathserveur_old.c
154 lines (118 loc) · 4.02 KB
/
serveur_old.c
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
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
/******************************************************************************/
/* Application: .... */
/******************************************************************************/
/* */
/* programme SERVEUR */
/* */
/******************************************************************************/
/* */
/* Auteurs : .... */
/* Date : .... */
/* */
/******************************************************************************/
#include<stdio.h>
#include <curses.h>
#include<sys/signal.h>
#include<sys/wait.h>
#include<stdlib.h>
#include "fon.h" /* Primitives de la boite a outils */
#define SERVICE_DEFAUT "1111"
#define MAXTENTATIVES 10
void serveur_appli (char *service); /* programme serveur */
/******************************************************************************/
/*---------------- programme serveur ------------------------------*/
int main(int argc,char *argv[])
{
char *service= SERVICE_DEFAUT; /* numero de service par defaut */
/* Permet de passer un nombre de parametre variable a l'executable */
switch (argc)
{
case 1:
printf("defaut service = %s\n", service);
break;
case 2:
service=argv[1];
break;
default :
printf("Usage:serveur service (nom ou port) \n");
exit(1);
}
/* service est le service (ou numero de port) auquel sera affecte
ce serveur*/
serveur_appli(service);
}
/******************************************************************************/
void serveur_appli(char *service)
/* Procedure correspondant au traitemnt du serveur de votre application */
{
int n;
int socketID;
int domaine = AF_INET;
int mode_comm = SOCK_STREAM;
char tampon[1000];
int sock_comm;
int nb_couleurs;
int nbtentatives = 0;
struct sockaddr_in *info_serveur;
struct sockaddr_in info_client;
/* avoir */
adr_socket(service, NULL, SOCK_STREAM, &info_serveur);
/* initialiser une socket pour un connexion TCP*/
socketID = h_socket(domaine,mode_comm);
h_bind(socketID, info_serveur);
/* ecouter sur la socket et accepter la connexion*/
h_listen(socketID, 1);
sock_comm = h_accept(socketID, &info_client);
/* ecrire le premier message dans le tampon (demander au client le nobre de couleurs)*/
sprintf(tampon, "Nombre de couleurs?\n");
write(sock_comm, tampon, sizeof(tampon));
/*lire la reponse du client*/
read(sock_comm, tampon, sizeof(tampon));
/* recupérer le nombre de couleurs envoyés par le client*/
printf("nbcouleurs= %c\n",tampon[0]);
nb_couleurs = tampon[0]-'0';
int resultat[nb_couleurs];
char comparaison[nb_couleurs];
int reponseOK = 1;
char comparaison_tampon[nb_couleurs];
/*remplir le tableau des resultats*/
int i;
for (i=0; i<nb_couleurs; i++){
resultat[i] = 0;
}
/*jouer le jeu*/
while(nbtentatives<MAXTENTATIVES && reponseOK){
nbtentatives++;
printf("TENTATIVE %d\n", nbtentatives);
sprintf(tampon,"Entrez la tentative numero %d\n",nbtentatives);
write(sock_comm, tampon, sizeof(tampon));
/*lire la reponse du client*/
read(sock_comm, tampon, sizeof(tampon));
printf("resultat recu:%s\n",tampon);
/*evaluer sa reponse*/
for (int i=0; i< nb_couleurs; i++){
sprintf(&comparaison[i] ,"%i", tampon[i] && (resultat[i]+'0'));
printf("resultat: %d\n",resultat[i]);
printf("client: %c\n",tampon[i]);
printf("comparaison: %c\n",comparaison[i]);
reponseOK = comparaison[i] -'0' && reponseOK;
}
tampon[0] = reponseOK + '0';
/*lui dire si il a gagné ou non*/
printf("reponseOK:%d\n",reponseOK);
printf("tampon%c\n",tampon[0]);
write(sock_comm, tampon, sizeof(tampon));
/*lui indiquer où il a juste*/
printf("valeurs trouvées: %s\n",comparaison);
write(sock_comm, comparaison, sizeof(comparaison));
}
if (nbtentatives < MAXTENTATIVES){
sprintf(tampon, "Vous avez gagné en %d tentatives :)\n", nbtentatives+1);
write(sock_comm, tampon, sizeof(tampon));
}
else{
sprintf(tampon, "Vous avez perdu :(\n");
write(sock_comm,tampon,sizeof(tampon));
}
}
/******************************************************************************/