Previous Contents Next

3.4.3   Exemple de serveur

int main(int argc,char *argv[])
{
int s;     /* Descripteur de la SOCKET */
struct sockaddr_in adresseServeur; /* Structure adresse du serveur */
int taille;
int statut;

/* Lecture des arguments de la commande */
analyseArguments(argc,argv);

/* Creation de la SOCKET d'ecoute du serveur */
s=socket(AF_INET,SOCK_DGRAM,0);
if(s<0) {perror("socket"); exit(-1);}

/* Preparation de la structure adresse du serveur */
adresseServeur.sin_family=AF_INET;
adresseServeur.sin_addr.s_addr=INADDR_ANY;
adresseServeur.sin_port=htons(port);

/* Installation du serveur a la bonne adresse */
statut=bind(s,(struct sockaddr *)&adresseServeur,sizeof adresseServeur);
if(statut<0) {perror("bind"); exit(-1);}   

/* On recupere le numero du port utilise */
statut=getsockname(s,(struct sockaddr *)&adresseServeur,&taille);
if(statut<0){perror("getsockname"); exit(-1); }
port=ntohs(adresseServeur.sin_port);
fprintf(stdout,"Le serveur est sur le port %d.\n",port);

/* Attente de la connexion d'un client puis dialogue  avec ce client */
while(1){
    struct sockaddr_in adresseClient; /* Structure adresse du client */
    int taille=sizeof adresseClient; /* Taille de cette adresse */
    char tampon1[MAX_TAMPON];
    char tampon2[MAX_TAMPON];
    int nboctets;

    nboctets=recvfrom(s,tampon1,MAX_TAMPON-1,0,
                      (struct sockaddr *)&adresseClient,
                      &taille);
    tampon1[nboctets]='\0';
    sprintf(tampon2,"%s%s",PREFIXE,tampon1);
    sendto(s,tampon2,strlen(tampon2),0,
           (struct sockaddr *)&adresseClient,taille);
    }
}

Previous Contents Next