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
|
/* declaration des librairies */
#define DEBUG_SERVER 1
struct _joueur{
int id_j;
char nom[50];
int pts;
};
struct _joueur joueur[4];
main(int argc, char *argv[]){
/********declaration*********/
int sock_rv; /*socket de rendez-vous */
int socket_serv; /*socket de service */
char buf[256]; /* buffer*/
struct sockaddr_in adr; /*structure d'une adresse (Sun) */
struct sockaddr_in adresse;
int lgadr,lgadresse; /* longueur de l'adresse*/
struct hostent *hote; /*infos sur l'hote*/
char nomh[50]; /*nom de l'hote*/
int nbJoueur=0; /*Nombre de joueurs actuel */
int i;
/****************************/
/*creation de la socket de rendez-vous */
if((sock_rv = socket(AF_INET, SOCK_STREAM, 0)) == -1){
perror("probleme avec la creation de la socket d'ecoute");
exit(1);
}
/* recuperation du nom de la machine presente */
if (gethostname(nomh, 50) == -1) {
perror("pb dans le gethostbyname");
exit(1);
}
/* preparation de l'adresse locale : port + toutes les @ IP */
adr.sin_family = AF_INET;
adr.sin_port = htons(atoi(argv[1]));
adr.sin_addr.s_addr = htonl(INADDR_ANY);
/* attachement de la socket a l'adresse locale */
lgadr = sizeof(adr);
if ((bind(sock_rv, &adr, lgadr)) == -1) {
perror("bind");
exit(1);
}
/*Declaration du service d'ecoute */
if(listen(sock_rv, 4)==-1){
perror("probleme avec le service d'ecoute");
exit(1);
}
/*boucle d'attente de connexion */
while(nbJoueur++<4){
fflush(stdout);
lgadresse = sizeof(adresse);
socket_serv=accept(sock_rv, &adresse, &lgadresse);
if(socket_serv==-1 &&errno==EINTR)
continue;
if(socket_serv==-1){
perror("probleme lors de la creation socket_serv\n");
exit(1);
}
if(!fork()){
close(sock_rv);
if(read(socket_serv, buf,sizeof(buf))==-1){
perror("probleme lors de la lecture");
exit(1);
}
/*initialisation de la structure */
strcpy(joueur[nbJoueur].nom, buf);
joueur[nbJoueur].id_j=socket_serv;
joueur[nbJoueur].pts=0;
if(write(socket_serv, buf, sizeof(buf))==-1){
perror("pb lors de l'ecriture de la socket pour le serveur");
exit(1);
}
close(socket_serv);
exit(0);
}
}
#if DEBUG_SERVER
printf("tableau de joueur\n");
printf("nbJoueur : %d\n", nbJoueur);
for(i=0; i<nbJoueur;i++){
printf("joueur %d\n\t id: %d \n\t nom : %s\n\t pts : %d\n",i,joueur[nbJoueur].id_j, joueur[nbJoueur].nom, joueur[nbJoueur].pts); }
#endif
close(sock_rv);
} |
Partager