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);
}
}