Soyez le premier à donner votre avis sur cette source.
Vue 7 581 fois - Téléchargée 327 fois
#include <stdio.h> #include <stdlib.h> #include <string.h> #include <unistd.h> #include <time.h> #include <errno.h> /*pour la fonction waitpid*/ #include <sys/types.h> #include <sys/wait.h> #include "creer_socket.h" #define TRUE 1 struct sigaction action; int nb; void eliminer_zombie(int sig) { int code,status; //printf("pid fils %d\n",pidfils); while(wait3(&status,WNOHANG,NULL)==0) { printf("_nstatus %d\n",WEXITSTATUS(status)); } if (WEXITSTATUS(status)==1) { nb=nombre(); } printf("Terminaison d'un processus de service\n"); wait(NULL); } int nombre() { int nb; srand(time(NULL)); nb=rand()%100; printf("Voici le nombre:%d\n",nb); return nb; } int client_nombre(int socket_service, int n) { int socketclt; char status[1024]; int nbclt; int nb,stat; nb=n; socketclt= socket_service; ecrire_socket(socketclt,"ok1\n"); lire_socket(socketclt,status); setsid(); printf("Fils PID %d \n",getpid()); if(strncmp(status,"oui",3)==0) { ecrire_socket(socketclt,"ok2\n"); lire_socket(socketclt,status); nbclt=atoi(status); if (nbclt==nb) { ecrire_socket(socketclt,"ok3\n"); return 1; } else { ecrire_socket(socketclt,"ok4\n"); return 2; } } else if (strncmp(status,"non",3)==0) { ecrire_socket(socketclt,"ok5\n"); return 2; } else { ecrire_socket(socketclt,"ok6\n"); return 2; } } int main(int argc, char* argv[]) { struct sockaddr_in adresse; int lg_adresse; int port, coderetour; /*valeur retourner par la fonction client nombre*/ int socket_ecoute,socket_service; if (argc!=2) { fprintf(stderr,"Nombre de parametres incorrect\n"); exit(2); } if(fork()!=0) exit(0); setsid(); printf("Serveur de PID %d lance\n",getpid()); action.sa_handler=eliminer_zombie; sigaction(SIGCHLD,&action,NULL); port=atoi(argv[1]); lg_adresse=sizeof(adresse); if((socket_ecoute=creer_socket_serveur(port))==-1) { fprintf(stderr,"creation socket ecoute impossible\n"); exit(2); } nb=nombre(); while (TRUE) { socket_service=accept(socket_ecoute,&adresse,&lg_adresse); if(socket_service==-1 && errno==EINTR) continue; if(socket_service==-1 && errno!=EINTR) { perror("Accept"); exit(2); } printf("Serveur: Connexion acceptee\n"); if(fork()==0) { close(socket_ecoute); coderetour=client_nombre(socket_service,nb); printf("Le Code retour est: %d\n",coderetour); close(socket_service); //return coderetour; exit(coderetour); } else { close(socket_service); } } printf("code retour %d\n",coderetour); return 0; }
12 juin 2004 à 14:25
sinon ahkrane, sous Linux ca compilera normalement impecc...si tu veux le compiler sous win il y a moyen mais il fa te falloir changer pas mal de chose :\
12 juin 2004 à 14:23
sinon ahkrane, sous Linux ca compilera normalement impecc...si tu veux le compiler sous win il y a moyen mais il fa te falloir changer pas mal de chose :\
11 avril 2003 à 09:53
Je suis sous windows (j'ai pas encore à ma disposition le pc sous linux ). Sous linux ça compilera?
Et si je veux que ça puisse compiler sous windows et linux, ya moyen?
Merci d'avance
12 mars 2003 à 17:03
Alors le fichier dans l encadre c est le serveur
appelle le server_alea.c
et compiles le comme decrit plus haut c est a dire
cc -c server_alea.c
cc -c creer_socket.c
cc -o server_alea.exe server_alea.o creer_socket.o
Ce code permet de faire tout ce que tu veux sauf la partie ou le serveur dit + grand ou + petit
Maintenant pour le client, il te suffit d aller ici pour l avoir
http://www.cppfrance.com/article.aspx?Val=1548
ce qu il y a dans l encadre tu l appelles client_alea.c
et tu compiles
cc -c client_alea.c
cc -c creer_socket.c
cc -o client_alea.exe client_alea.o creer_socket.o
j espere avoir ete assez clair sinon reposte un message
@++
Pheno
12 mars 2003 à 14:11
Selon la méthode décrite plus haut pour la compile. J'aimerais plus de détail. Le fichier zipper est le serveur et le fichier dans l'encadrer est le client est-ce bien ça. Ensuite quel est le nom a donner pour le fichier dans l'encadrer. Comment ça fonctionne au juste. Le fichier client est ou.
Car je veux créer un fichier client et serveur. Le client doit se connecter au serveur, le serveur doit penser a un nombre et le client doit le deviner. Le serveur doit l'aider en lui disant si le nombre que le client donne est plus petit ou plus grand que celui du serveur.
Donc je voulais trouver une référence pour m'aider dans la connexion client serveur. Merci de ton aide
Vous n'êtes pas encore membre ?
inscrivez-vous, c'est gratuit et ça prend moins d'une minute !
Les membres obtiennent plus de réponses que les utilisateurs anonymes.
Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.
Le fait d'être membre vous permet d'avoir des options supplémentaires.