Réalisation d'un serveur echo tcp multiclient (unix)

Description

réalisation d'un ptit serveur ECHO avec des socket UNIX et des threads...

Source / Exemple :


/**********************************************************************/
/***** programme serveur 
 transfert adresse IP du serveur en notation décimale pointée par la ligne de
 commande 
 DESPORTES Adrien  BONIN Thomas
 Etat d'avancement: OK testé
/**********************************************************************/
#include <stdio.h>
#include <string.h>
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <string.h>
#include <unistd.h>
#include <errno.h>
#include <pthread.h>
#include "reseau.h"
/******* definition des constantes ******/
#define PORT_ECHO 1030
#define TAILLE_BUF 20

/****************** programme SERVEUR Echo TCP ****************/
void *echo(void *numSocketConnecte);

int main(int nbArg, char *arg[])
{
int numSocket,lengAdr,numSocketConnecte;
struct sockaddr_in sockAdrServeur;
 pthread_t serviceClient,serviceClient2;
 
/*************************************************/ 
/** ouvre un socket local**/
/*************************************************/ 

 numSocket=socketServer(PORT_ECHO,TCP);
 afficheInfosSocket(numSocket);
 
while(1)
{ 
 /*accept*/
 printf("serveur en attente...\n");
 numSocketConnecte=accept(numSocket,(struct sockaddr*)NULL,(int *)NULL);
 printf("demande de connexion avec socket n°%d\n",numSocketConnecte);
 
 /*création de taches*/
 pthread_create(&serviceClient, NULL,echo, (void *) &numSocketConnecte);
}
 
 pthread_exit(NULL);	
}

void *echo(void *numSocketConnecte)
{
 char bufferRecep[TAILLE_BUF],sortie=0;
 int nbOctRecu;
 int *adrNumSocket=(int*)numSocketConnecte;
 int numSocket=*adrNumSocket;

  /****** récception de l'écho ****/

 while(1)
 {
   nbOctRecu= read(numSocket,bufferRecep,TAILLE_BUF); 
   printf("je lis sur %d\n",numSocket); 
   switch (nbOctRecu)
   {
     case -1:
        perror("erreur de reception: ");
        break;
    
     default:
     /***** on construit la requete d'echo ***/
        bufferRecep[nbOctRecu]=0; /* pour terminer la chaine au cas ou */
        printf ("message client: %s",bufferRecep);
   }
 
 
 if (strncmp(bufferRecep,"QUIT",4)==0)
	break;
  
  /**** emission de la requete d'echo vers le client ******/
   
 if (write(numSocket,bufferRecep,strlen(bufferRecep)+1)<0)
     perror ("probleme émission:");
 printf("j'écris sur %d\n",numSocket);    
  }
  
/*************************************************/
/* on ferme la connexion */
/*************************************************/
   
   printf ("connexion  fermée\n");
   close(numSocket);
   pthread_exit(NULL);
   
}

Codes Sources

A voir également

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.