diff --git a/bal.h b/bal.h new file mode 100644 index 0000000..add12b3 --- /dev/null +++ b/bal.h @@ -0,0 +1,71 @@ +// +// Created by Béranger Quintana | 3AE E +// + +#ifndef PROGC_BAL_H +#define PROGC_BAL_H +//--------------------------------------------------- +//---------------Structure Liste--------------------- +//--------------------------------------------------- + +typedef struct BAL +{ + int num_bal ; + struct LETTRE* lfirst ; + struct LETTRE* lcurrent ; + struct LETTRE* llast ; + struct BAL* suiv ; +}BAL; + +typedef struct LETTRE +{ + int num; + char* message ; + struct LETTRE* suiv ; +}; + +typedef struct LISTE { + struct BAL * bal_premier ; + struct BAL * bal_dernier ; + struct BAL * bal_courant ; +}LISTE_BAL; +//--------------------------------------------------- +// GESTION BAL + +LISTE_BAL* initialiser_bal(){ + + LISTE_BAL liste ; + liste = (LISTE_BAL)malloc(sizeof(struct LISTE)); + liste->bal_premier = NULL; + liste->bal_dernier = NULL; + liste->bal_courant = NULL; + return liste ; +} + +void ajouter_bal(int num, LISTE_BAL * liste){ + + BAL ma_bal = (BAL)malloc(sizeof(struct BAL)); + ma_bal->num_bal = num ; + ma_bal->l_premier=NULL; + ma_bal->l_dernier=NULL; + ma_bal->l_courant=NULL; + ma_bal->bal_suiv = NULL; + + + if (liste == NULL) + { + liste->bal_premier = ma_bal ; + liste->bal_dernier = ma_bal ; + } + else { + liste->bal_dernier->bal_suiv = ma_bal ; + liste->bal_dernier = ma_bal ; + } + liste->bal_courant = ma_bal ; +} + + +LISTE_BAL* + + +#endif //PROGC_BAL_H diff --git a/makefile b/makefile index fe88be5..2b06da4 100644 --- a/makefile +++ b/makefile @@ -1,3 +1,3 @@ -tsock: tsock_v3.c tsock.h - gcc tsock_v3.c -o tsock_v3 -g +tsock: tsock_p2.c tsock.h + gcc tsock_p2.c -o tsock_p2 -g diff --git a/tsock.h b/tsock.h index 7c6e3d9..85f8640 100644 --- a/tsock.h +++ b/tsock.h @@ -1,538 +1,539 @@ -//--------------------------PROG C ET RESEAUX----------------------- -//Nom : Quintana ----------------------------------------------- -//Prénom : Béranger ----------------------------------------------- -//Groupe : 3AE E ----------------------------------------------- -//------------------------------------------------------------------ - -#ifndef __tsock__ - -//--------------------------------------------------- -//-------------Déclaration des fonctions------------- -//--------------------------------------------------- - -void construire_message(char *message, char motif, int lg, int i); -void construire_message2(char *message, char motif, int lg, int i); -void afficher_message(char *message, int lg); -void envoi_UDP(int port, int nb_message , int lg_msg, char*dest); -void reception_UDP(int port, int nb_message , int lg_message); -void ClientTCP (int port, int nb_message , int lg_msg, char* dest); -void ServeurTCP(int port , int nb_message, int lg_msg); -void printbuffer(int n); -void printbuffer2(int n , char*message); - - - - -//--------------------------------------------------- -//-------------Définitions des fonctions------------- -//--------------------------------------------------- - -//-------------Construire message 2 ----------------- -void construire_message2(char *message, char motif, int lg, int i) -{ - - char alphabet[] = "abcdefghijklmnopqrstuvwxyz"; - if (i>26) - motif=alphabet[i%26-1]; - else if (i=26) - motif='z'; - - else - motif = alphabet[i - 1]; - - - for (int j=0;j=10 & n<100) - { - printf("[---%d",n); - } - if (n>=100 & n<1000) - { - printf("[--%d",n); - } - if (n>=1000 & n<10000) - { - printf("[--%d",n); - } - if (n>=10000 & n<100000) - { - printf("[-%d",n); - } - if (n>=100000 & n<1000000) - { - printf("[%d",n); - } - if (n>=1000000) - { - printf("Trop de messages à envoyer (n>1000000 \n"); - exit(1); - } -} - - -//------------------PRINTBUFFER2---------------------- -void printbuffer2(int n , char*message) -{ - if (n>=100000) - { - printf("Trop de messages à envoyer (n>1000000 \n"); - exit(1); - } - - if (n<10) - { - for (int i=0 ; i<4 ; i++) - { - *(message+i)='-'; - } - //char nb[1]; - *(message+4)= n + '0'; - } - if (n>=10 & n<100) - { - char nb[2]; - - for (int i=0 ; i<3 ; i++) - { - *(message+i)='-'; - } - sprintf(nb,"%d",n); - *(message+3)=*nb; - n=n%10; - sprintf(nb,"%d", n); - *(message+4)=*nb; - } - if (n>=100 & n<1000) - { - char nb[3]; - for (int i=0 ; i<2 ; i++) - { - *(message+i)='-'; - } - sprintf(nb,"%d",n); - *(message+2)=*nb; - n=n%100; - sprintf(nb,"%d", n); - *(message+3)=*nb; - n=n%10; - sprintf(nb,"%d", n); - *(message+4)=*nb; - } - if (n>=1000 & n<10000) - { - int j=1000; - - char nb[4]; - for (int i=0 ; i<2 ; i++) - { - *(message+i)='-'; - } - - sprintf(nb,"%d",n); - *(message+1)=*nb; - n=n%1000; - sprintf(nb,"%d", n); - *(message+2)=*nb; - n=n%100; - sprintf(nb,"%d", n); - *(message+3)=*nb; - n=n%10; - sprintf(nb,"%d", n); - *(message+4)=*nb; - } - if (n>=10000 & n<100000) - { - char nb[4]; - for (int i=0 ; i<2 ; i++) - { - *(message+i)='-'; - } - sprintf(nb,"%d",n); - *(message)=*nb; - n=n%10000; - sprintf(nb,"%d", n); - *(message+1)=*nb; - n=n%1000; - sprintf(nb,"%d", n); - *(message+2)=*nb; - n=n%100; - sprintf(nb,"%d", n); - *(message+3)=*nb; - n=n%10; - sprintf(nb,"%d", n); - *(message+4)=*nb; - } - - -} - -//Construction des messages - -void construire_message(char *message, char motif, int lg, int i ) - -{ - char alphabet[] = "abcdefghijklmnopqrstuvwxyz"; - if (i>26) - motif=alphabet[i%26-1]; - - else - motif = alphabet[i - 1]; - - - for (int j=0;jh_addr, hp->h_length); - //printf("Association IP OK\n"); - //printf("Nombre de messages à envoyer : %d\n", nb_mess); - - for (int i=1; i<=nb_mess ; i++) - { - construire_message(message,'a',lg_msg,i); - printf("SOURCE : Envoi n°%d (%d) [", i, lg_msg); - - - if((sent=sendto(sock,message,lg_msg,0,(struct sockaddr*)&addr_distant,sizeof(addr_distant)))==-1) - { - printf("Erreur sendto\n"); - exit(1); - } - printbuffer2(i,message); - afficher_message(message,sent); - } - - if(close(sock)==-1) //fermeture + test erreur à la fermeture - { - printf("Echec à la destruction du socket\n"); - exit(1); - } -} - -//---------------------------------------------------- -//------------------Reception UDP--------------------- -//---------------------------------------------------- - -void reception_UDP(int port, int nb_message, int lg_message) -{ - - int sock; - struct sockaddr_in addr_local,addr_distant; - int recv; - int lg_dist; - char *message=malloc(sizeof(char)*lg_message) ; - - if((sock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==-1) //création du socket + test erreur d'ouverture - { - printf("Erreur à la création du socket\n"); - exit(1); - } - - memset((char*)&addr_local,0,sizeof(addr_local));//reset de addr_local - addr_local.sin_family=AF_INET; //attribution des différents attributs de addr_local - addr_local.sin_port=port; - addr_local.sin_addr.s_addr=INADDR_ANY; //On dit que l'on veut recevoir sur n'importe quelle carte réseau de notre machine (=INADDR_ANY) - - - if ((bind(sock,(struct sockaddr*)&addr_local, sizeof(addr_local)))==-1) //bind de la réception + test erreur du bind - { - printf("Echec du Bind\n"); - exit(1); - } - - //printf("bind OK\n"); - - if (nb_message==-1) - nb_message=10; - - //printf("%d messages à recevoir\n",nb_message); - lg_dist=sizeof(addr_distant); - //printf("lg_dist initialisé\n"); - - for (int i=1 ; i<=nb_message ; i++) - { - - recv=recvfrom(sock,message,lg_message,0,(struct sockaddr*)&addr_distant,&lg_dist); - if (recv==-1) //process de réception (recvfrom natif à l'API socket, + test erreur - { - printf("Erreur receive from\n"); - exit(1); - } - else - { - printf("PUITS : Réception n°%d (%d) :",i,lg_message); - afficher_message(message,recv); - } - } - - if(close(sock)==-1) //fermeture + test erreur à la fermeture - { - printf("Echec à la destruction du socket\n"); - exit(1); - } -} - -//--------------------------------------------------------------- -//----------------ClientTCP <=> source=1------------------------- -//--------------------------------------------------------------- - -void ClientTCP (int port, int nb_message , int lg_msg , char* dest) -{ - //Déclarations - int sock; - struct sockaddr_in addr_distant ; - int lg_addr_distant=sizeof(addr_distant); - - struct hostent *hp; - char motif; - char * message=malloc(lg_msg*sizeof(char)); //Penser au free en fin de programme pour libérer l'espace mémoire - int envoi=-1; - -//--------------------------------------- -//--------Etablissement connexion-------- -//--------------------------------------- - - //Création socket - if((sock=socket(AF_INET,SOCK_STREAM,0))==-1) - { - printf("Erreur à l'ouverture du Socket Stream"); - exit(1); - } - - //Construction adresse socket distant - memset((char*)&addr_distant,0,sizeof(addr_distant)); - addr_distant.sin_family=AF_INET; //Internet - addr_distant.sin_port=port; //Numéro de Port - - //Affectation IP - if((hp=gethostbyname(dest))==NULL) - { - printf("Erreur de requête IP.\n"); - exit(1); - } - - memcpy((char*)&(addr_distant.sin_addr.s_addr), hp->h_addr , hp->h_length); - - //Demande de connexion - - if (connect(sock,(struct sockaddr *)&addr_distant,sizeof(addr_distant))==-1) - { - printf("Erreur lors de la connexion, en attente de la tentative suivante \n"); - - } - - //printf("Connexion Réussie !\n"); - -//----------------------------------------- -//----------TRANSFERT DE DONNEES----------- -//----------------------------------------- - - for (int i=1; i<=nb_message;i++) - { - printf("SOURCE : envoi n°%d (%d) [", i,lg_msg); - //Création du message - - construire_message(message,motif,lg_msg,i); - - printbuffer2(i,message); - afficher_message(message,lg_msg); - - //Envoi du message - - if ((envoi=write(sock,message,lg_msg/*,0,(struct sockaddr*)&addr_distant,lg_addr_distant)*/))==-1) - { - printf("Echec de l'envoi du message (fonction write en défaut)\n"); - exit(1); - } - } - - //Fermeture connexion - - if(shutdown(sock,2)==-1) - { - printf("Erreur à la fermeture de la connexion TCP \n"); - exit(1); - } - - if (close(sock)==-1) - { - printf("Echec de la fermeture du socket distant"); - exit(1); - } - - free(message); - - printf("Envoi effectué avec succès\n"); -} - -//--------------------------------------------------------------- -//----------------ServeurTCP <=> source=0------------------------- -//--------------------------------------------------------------- - -void ServeurTCP(int port , int nb_message, int lg_msg) -{ - //Déclarations - int sock , sock2; //sock bis local orienté échanges - struct sockaddr* addr_distant; - struct sockaddr_in addr_local; - int lg_addr_distant=sizeof(addr_distant); - int lg_addr_local=sizeof(addr_local); - struct hostent *hp; - char motif; - char * message=malloc(lg_msg*sizeof(char)); //Penser au free en fin de programme pour libérer l'espace mémoire - int lg_recv=-1; - -//------------- -//Connexion --- -//------------- - - //Création socket local - - if ((sock=socket(AF_INET,SOCK_STREAM,0))==-1) - { - printf("Echec de la création d'un socket local\n"); - exit(1); - } - - //Construction adresse socket local | Affectation port et domaine - - memset((char*)&addr_local, 0 , sizeof(addr_local)); - addr_local.sin_family=AF_INET; - addr_local.sin_addr.s_addr=INADDR_ANY; - addr_local.sin_port=port; - - //printf("Socket créé addressé\n"); - - //Bind - - if (bind(sock,(struct sockaddr *)&addr_local, lg_addr_local)==-1) - { - printf("Echec du bind.\n"); - exit(1); - } - //printf("bind effectué\n"); - - //Check connexions entrantes - - if (listen(sock,100)<0) - { - printf("Trop de connexions en attentes, échec de la demande\n"); - exit(1); - } - - //rintf("listen accepté\n"); - - - //Accept connexion - - - if (nb_message==-1) - { - nb_message=10; - } - if ((sock2 = accept(sock,(struct sockaddr*)&addr_distant,&lg_addr_distant))==-1) - { - printf("Refus de connexion par le serveur\n"); - exit(1); - } - //printf("Accept validé, %d messages à recevoir\n",nb_message); - //Reception des messages au niveau du socket d'échange - - for (int i=1;i<=nb_message;i++) - { - printf("PUITS : Réception n°%d (%d) [" , i , lg_msg); - if((lg_recv=read(sock2,message, lg_msg))<0) - { - printf("Echec de la lecture du message entrant \n"); - exit(1); - } - afficher_message(message, lg_recv); - } - //Fermeture connexion - - if ((shutdown(sock , 2))==-1) - { - printf("Erreur à la fermeture de la connexion : shutdown\n"); - exit(1); - } - - //Ciao le socket - if(close(sock)==-1) - { - printf("Impossible de fermer le socket"); - } - - free(message); - - -} - -#endif +//--------------------------PROG C ET RESEAUX----------------------- +//Nom : Quintana ----------------------------------------------- +//Prénom : Béranger ----------------------------------------------- +//Groupe : 3AE E ----------------------------------------------- +//------------------------------------------------------------------ + +#ifndef __tsock__ + +//--------------------------------------------------- +//-------------Déclaration des fonctions------------- +//--------------------------------------------------- + +void construire_message(char *message, char motif, int lg, int i); +void construire_message2(char *message, char motif, int lg, int i); +void afficher_message(char *message, int lg); +void envoi_UDP(int port, int nb_message , int lg_msg, char*dest); +void reception_UDP(int port, int nb_message , int lg_message); +void ClientTCP (int port, int nb_message , int lg_msg, char* dest); +void ServeurTCP(int port , int nb_message, int lg_msg); +void printbuffer(int n); +void printbuffer2(int n , char*message); + + + + +//--------------------------------------------------- +//-------------Définitions des fonctions------------- +//--------------------------------------------------- + +//-------------Construire message 2 ----------------- +void construire_message2(char *message, char motif, int lg, int i) +{ + + char alphabet[] = "abcdefghijklmnopqrstuvwxyz"; + if (i>26) + motif=alphabet[i%26-1]; + else if (i=26) + motif='z'; + + else + motif = alphabet[i - 1]; + + + for (int j=0;j=10 & n<100) + { + printf("[---%d",n); + } + if (n>=100 & n<1000) + { + printf("[--%d",n); + } + if (n>=1000 & n<10000) + { + printf("[--%d",n); + } + if (n>=10000 & n<100000) + { + printf("[-%d",n); + } + if (n>=100000 & n<1000000) + { + printf("[%d",n); + } + if (n>=1000000) + { + printf("Trop de messages à envoyer (n>1000000 \n"); + exit(1); + } +} + + +//------------------PRINTBUFFER2---------------------- +void printbuffer2(int n , char*message) +{ + if (n>=100000) + { + printf("Trop de messages à envoyer (n>1000000 \n"); + exit(1); + } + + if (n<10) + { + for (int i=0 ; i<4 ; i++) + { + *(message+i)='-'; + } + //char nb[1]; + *(message+4)= n + '0'; + } + if (n>=10 & n<100) + { + char nb[2]; + + for (int i=0 ; i<3 ; i++) + { + *(message+i)='-'; + } + sprintf(nb,"%d",n); + *(message+3)=*nb; + n=n%10; + sprintf(nb,"%d", n); + *(message+4)=*nb; + } + if (n>=100 & n<1000) + { + char nb[3]; + for (int i=0 ; i<2 ; i++) + { + *(message+i)='-'; + } + sprintf(nb,"%d",n); + *(message+2)=*nb; + n=n%100; + sprintf(nb,"%d", n); + *(message+3)=*nb; + n=n%10; + sprintf(nb,"%d", n); + *(message+4)=*nb; + } + if (n>=1000 & n<10000) + { + int j=1000; + + char nb[4]; + for (int i=0 ; i<2 ; i++) + { + *(message+i)='-'; + } + + sprintf(nb,"%d",n); + *(message+1)=*nb; + n=n%1000; + sprintf(nb,"%d", n); + *(message+2)=*nb; + n=n%100; + sprintf(nb,"%d", n); + *(message+3)=*nb; + n=n%10; + sprintf(nb,"%d", n); + *(message+4)=*nb; + } + if (n>=10000 & n<100000) + { + char nb[4]; + for (int i=0 ; i<2 ; i++) + { + *(message+i)='-'; + } + sprintf(nb,"%d",n); + *(message)=*nb; + n=n%10000; + sprintf(nb,"%d", n); + *(message+1)=*nb; + n=n%1000; + sprintf(nb,"%d", n); + *(message+2)=*nb; + n=n%100; + sprintf(nb,"%d", n); + *(message+3)=*nb; + n=n%10; + sprintf(nb,"%d", n); + *(message+4)=*nb; + } + + +} + +//Construction des messages + +void construire_message(char *message, char motif, int lg, int i ) + +{ + char alphabet[] = "abcdefghijklmnopqrstuvwxyz"; + if (i>26) + motif=alphabet[i%26-1]; + + else + motif = alphabet[i - 1]; + + + for (int j=0;jh_addr, hp->h_length); + //printf("Association IP OK\n"); + //printf("Nombre de messages à envoyer : %d\n", nb_mess); + + for (int i=1; i<=nb_mess ; i++) + { + construire_message(message,'a',lg_msg,i); + printf("SOURCE : Envoi n°%d (%d) [", i, lg_msg); + + + if((sent=sendto(sock,message,lg_msg,0,(struct sockaddr*)&addr_distant,sizeof(addr_distant)))==-1) + { + printf("Erreur sendto\n"); + exit(1); + } + printbuffer2(i,message); + afficher_message(message,sent); + } + + if(close(sock)==-1) //fermeture + test erreur à la fermeture + { + printf("Echec à la destruction du socket\n"); + exit(1); + } +} + +//---------------------------------------------------- +//------------------Reception UDP--------------------- +//---------------------------------------------------- + +void reception_UDP(int port, int nb_message, int lg_message) +{ + + int sock; + struct sockaddr_in addr_local,addr_distant; + int recv; + int lg_dist; + char *message=malloc(sizeof(char)*lg_message) ; + + if((sock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==-1) //création du socket + test erreur d'ouverture + { + printf("Erreur à la création du socket\n"); + exit(1); + } + + memset((char*)&addr_local,0,sizeof(addr_local));//reset de addr_local + addr_local.sin_family=AF_INET; //attribution des différents attributs de addr_local + addr_local.sin_port=port; + addr_local.sin_addr.s_addr=INADDR_ANY; //On dit que l'on veut recevoir sur n'importe quelle carte réseau de notre machine (=INADDR_ANY) + + + if ((bind(sock,(struct sockaddr*)&addr_local, sizeof(addr_local)))==-1) //bind de la réception + test erreur du bind + { + printf("Echec du Bind\n"); + exit(1); + } + + //printf("bind OK\n"); + + if (nb_message==-1) + nb_message=10; + + //printf("%d messages à recevoir\n",nb_message); + lg_dist=sizeof(addr_distant); + //printf("lg_dist initialisé\n"); + + for (int i=1 ; i<=nb_message ; i++) + { + + recv=recvfrom(sock,message,lg_message,0,(struct sockaddr*)&addr_distant,&lg_dist); + if (recv==-1) //process de réception (recvfrom natif à l'API socket, + test erreur + { + printf("Erreur receive from\n"); + exit(1); + } + else + { + printf("PUITS : Réception n°%d (%d) :",i,lg_message); + afficher_message(message,recv); + } + } + + if(close(sock)==-1) //fermeture + test erreur à la fermeture + { + printf("Echec à la destruction du socket\n"); + exit(1); + } +} + +//--------------------------------------------------------------- +//----------------ClientTCP <=> source=1------------------------- +//--------------------------------------------------------------- + +void ClientTCP (int port, int nb_message , int lg_msg , char* dest) +{ + //Déclarations + int sock; + struct sockaddr_in addr_distant ; + int lg_addr_distant=sizeof(addr_distant); + + struct hostent *hp; + char motif; + char * message=malloc(lg_msg*sizeof(char)); //Penser au free en fin de programme pour libérer l'espace mémoire + int envoi=-1; + +//--------------------------------------- +//--------Etablissement connexion-------- +//--------------------------------------- + + //Création socket + if((sock=socket(AF_INET,SOCK_STREAM,0))==-1) + { + printf("Erreur à l'ouverture du Socket Stream"); + exit(1); + } + + //Construction adresse socket distant + memset((char*)&addr_distant,0,sizeof(addr_distant)); + addr_distant.sin_family=AF_INET; //Internet + addr_distant.sin_port=port; //Numéro de Port + + //Affectation IP + if((hp=gethostbyname(dest))==NULL) + { + printf("Erreur de requête IP.\n"); + exit(1); + } + + memcpy((char*)&(addr_distant.sin_addr.s_addr), hp->h_addr , hp->h_length); + + //Demande de connexion + + if (connect(sock,(struct sockaddr *)&addr_distant,sizeof(addr_distant))==-1) + { + printf("Erreur lors de la connexion, en attente de la tentative suivante \n"); + + } + + //printf("Connexion Réussie !\n"); + +//----------------------------------------- +//----------TRANSFERT DE DONNEES----------- +//----------------------------------------- + + for (int i=1; i<=nb_message;i++) + { + printf("SOURCE : envoi n°%d (%d) [", i,lg_msg); + //Création du message + + construire_message(message,motif,lg_msg,i); + + printbuffer2(i,message); + afficher_message(message,lg_msg); + + //Envoi du message + + if ((envoi=write(sock,message,lg_msg/*,0,(struct sockaddr*)&addr_distant,lg_addr_distant)*/))==-1) + { + printf("Echec de l'envoi du message (fonction write en défaut)\n"); + exit(1); + } + } + + //Fermeture connexion + + if(shutdown(sock,2)==-1) + { + printf("Erreur à la fermeture de la connexion TCP \n"); + exit(1); + } + + if (close(sock)==-1) + { + printf("Echec de la fermeture du socket distant"); + exit(1); + } + + free(message); + + printf("Envoi effectué avec succès\n"); +} + +//--------------------------------------------------------------- +//----------------ServeurTCP <=> source=0------------------------- +//--------------------------------------------------------------- + +void ServeurTCP(int port , int nb_message, int lg_msg) +{ + //Déclarations + int sock , sock2; //sock bis local orienté échanges + struct sockaddr* addr_distant; + struct sockaddr_in addr_local; + int lg_addr_distant=sizeof(addr_distant); + int lg_addr_local=sizeof(addr_local); + struct hostent *hp; + char motif; + char * message=malloc(lg_msg*sizeof(char)); //Penser au free en fin de programme pour libérer l'espace mémoire + int lg_recv=-1; + +//------------- +//Connexion --- +//------------- + + //Création socket local + + if ((sock=socket(AF_INET,SOCK_STREAM,0))==-1) + { + printf("Echec de la création d'un socket local\n"); + exit(1); + } + + //Construction adresse socket local | Affectation port et domaine + + memset((char*)&addr_local, 0 , sizeof(addr_local)); + addr_local.sin_family=AF_INET; + addr_local.sin_addr.s_addr=INADDR_ANY; + addr_local.sin_port=port; + + //printf("Socket créé addressé\n"); + + //Bind + + if (bind(sock,(struct sockaddr *)&addr_local, lg_addr_local)==-1) + { + printf("Echec du bind.\n"); + exit(1); + } + //printf("bind effectué\n"); + + //Check connexions entrantes + + if (listen(sock,100)<0) + { + printf("Trop de connexions en attentes, échec de la demande\n"); + exit(1); + } + + //rintf("listen accepté\n"); + + + //Accept connexion + + + if (nb_message==-1) + { + nb_message=10; + } + if ((sock2 = accept(sock,(struct sockaddr*)&addr_distant,&lg_addr_distant))==-1) + { + printf("Refus de connexion par le serveur\n"); + exit(1); + } + //printf("Accept validé, %d messages à recevoir\n",nb_message); + //Reception des messages au niveau du socket d'échange + + for (int i=1;i<=nb_message;i++) + { + printf("PUITS : Réception n°%d (%d) [" , i , lg_msg); + if((lg_recv=read(sock2,message, lg_msg))<0) + { + printf("Echec de la lecture du message entrant \n"); + exit(1); + } + afficher_message(message, lg_recv); + } + //Fermeture connexion + + if ((shutdown(sock , 2))==-1) + { + printf("Erreur à la fermeture de la connexion : shutdown\n"); + exit(1); + } + + //Ciao le socket + if(close(sock)==-1) + { + printf("Impossible de fermer le socket"); + } + + free(message); + + +} + +#endif diff --git a/tsock_p2 b/tsock_p2 new file mode 100644 index 0000000..4f45a39 Binary files /dev/null and b/tsock_p2 differ diff --git a/tsock_p2.c b/tsock_p2.c new file mode 100644 index 0000000..071d6e7 --- /dev/null +++ b/tsock_p2.c @@ -0,0 +1,240 @@ +//--------------------------PROG C ET RESEAUX----------------------- +//Nom : Quintana ----------------------------------------------- +//Prénom : Béranger ----------------------------------------------- +//Groupe : 3AE E ----------------------------------------------- +//------------------------------------------------------------------ + + +/* librairie standard ... */ +#include +/* pour getopt */ +#include +/* déclaration des types de base */ +#include +/* constantes relatives aux domaines, types et protocoles */ +#include +/* constantes et structures propres au domaine UNIX */ +#include +/* constantes et structures propres au domaine INTERNET */ +#include +/* structures retournées par les fonctions de gestion de la base de +données du réseau */ +#include +/* pour les entrées/sorties */ +#include +/* pour la gestion des erreurs */ +#include +/* fonctions de tsock*/ +#include "tsock.h" +/*fonctions de BAL*/ +#include "bal.h" +/* pour afficher l'adresse d'un socket */ +#include + + +/********************************************************************** +Programme Principal +**********************************************************************/ + +void main (int argc, char **argv) +{ + + //Déclarations + + int c; + extern char *optarg; + extern int optind; + int nb_message = -1; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */ + int source = -1 ; /* 0=puits, 1=source */ + int tcp=1; //tcp=1 => tcp ; tcp=0 =>udp + struct hostent *hp; + int bal=-1; + int port = -1; //Numéro de port + int recep=-1; + port =htons(port); + + char *dest ; + int lg =30; + + while ((c = getopt(argc, argv, "pn:sul:be:r:")) != -1) + { + + switch (c) + { + case 'p': + if (source == 1) + { + printf("usage: cmd [-p|-s][-n ##]\n"); + exit(1); + } + source = 0; + break; + + case 's': + if (source == 0) + { + printf("usage: cmd [-p|-s][-n ##]\n"); + exit(1) ; + } + dest=argv[argc-2]; + source = 1; + break; + + case 'n': + nb_message = atoi(optarg); + if (nb_message>100000) + { + printf("Trop d'envois, n> 100 000\n"); + exit (1); + } + break; + + case 'u': + tcp=0; + break; + + case 'l': + lg = atoi(optarg); + break; + + case 'b' : + bal=1; + break; + + case 'e' : + if (recep==1) + { + printf("On ne peut pas être émetteur et récepteur, -r ou -e, pas les deux\n"); + exit(1); + } + + bal=1; + recep=0; + + break; + + case 'r' : + if (recep==0) + { + printf("On ne peut être émetteur et récepteur en même temps : -e ou -r mais pas les deux\n"); + exit(1); + } + bal=1; + recep=1; + + + break; + + + default: + printf("usage: cmd [-p|-s|-b|-e|-r][-n ##]\n"); + break; + } + } + + if ((port=atoi(argv[argc-1]))!=-1) + { + port=htons(port); + } + dest=argv[argc-2]; + + if (source == -1 & bal ==-1) + { + printf("usage: cmd [-p|-s][-n ##]\n"); + exit(1) ; + } + if (bal == -1) + { + if (source == 1) + printf("SOURCE : "); + else + printf("PUITS : "); + + + if (tcp==1) + printf("Protocole de transport : TCP | "); + + else + printf("Protocole de transport : UDP | "); + + if (nb_message == -1) + { + + if (source == 1) + { + nb_message = 10; + printf("Nombre d'envois : %d | ", nb_message); + } + else + printf("Nombre de receptions : infini | "); + } + + else + { + if (source == 1) + { + + printf("Nombre d'envois = %d | ", nb_message); + } + else + { + printf("nb de tampons à recevoir = %d | ",nb_message); + } + } + + printf("Destinataire : %s\n", dest); + + + //Envoi de message, Source en UDP + + int length_addr_dist; + length_addr_dist=sizeof(struct sockaddr_in); + + + if(source==1 & tcp==0) + { + envoi_UDP(port,nb_message,lg,dest); + } + + //PUITS de réception en UDP + + else if (source==0 & tcp==0) + { + reception_UDP(port,nb_message,lg); + } + + + else if (source==0 & tcp==1) + { + + ServeurTCP(port, nb_message, lg); + } + + else if (source==1 & tcp==1) + { + + ClientTCP(port,nb_message,lg,dest); + } + } + + else + { + if (bal==1 &recep==0) + { + printf("On fait un serveur BAL\n"); + } + + else if (bal==1 & recep ==0) + { + printf("On est emetteur de lettres\n"); + } + + else if(bal==1 &recep == 1) + { + printf("On récupère des lettres \n"); + } + } + + + exit(0); +} diff --git a/tsock_v2.c b/tsock_v2.c deleted file mode 100644 index e8b4e9d..0000000 --- a/tsock_v2.c +++ /dev/null @@ -1,175 +0,0 @@ -//--------------------------PROG C ET RESEAUX----------------------- -//Nom : Quintana ----------------------------------------------- -//Prénom : Béranger ----------------------------------------------- -//Groupe : 3AE E ----------------------------------------------- -//------------------------------------------------------------------ - - -/* librairie standard ... */ -#include -/* pour getopt */ -#include -/* déclaration des types de base */ -#include -/* constantes relatives aux domaines, types et protocoles */ -#include -/* constantes et structures propres au domaine UNIX */ -#include -/* constantes et structures propres au domaine INTERNET */ -#include -/* structures retournées par les fonctions de gestion de la base de -données du réseau */ -#include -/* pour les entrées/sorties */ -#include -/* pour la gestion des erreurs */ -#include -/* fonctions de tsock*/ -#include "tsock.h" -/* pour afficher l'adresse d'un socket */ -#include - - -/********************************************************************** -Programme Principal -**********************************************************************/ - -void main (int argc, char **argv) -{ - - //Déclarations - - int c; - extern char *optarg; - extern int optind; - int nb_message = -1; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */ - int source = -1 ; /* 0=puits, 1=source */ - int tcp=1; //tcp=1 => tcp ; tcp=0 =>udp - struct hostent *hp; - - int port = -1; //Numéro de port - port =htons(port); - - char *dest ; - int lg_local; - - while ((c = getopt(argc, argv, "pn:su")) != -1) { - - - switch (c) { - case 'p': - if (source == 1) { - printf("usage: cmd [-p|-s][-n ##]\n"); - exit(1); - } - source = 0; - break; - - case 's': - if (source == 0) { - printf("usage: cmd [-p|-s][-n ##]\n"); - exit(1) ; - } - dest=argv[argc-2]; - source = 1; - break; - - case 'n': - nb_message = atoi(optarg); - break; - - case 'u': - if (tcp ==0){ - printf("usage : cmd [-p| -s] [-u][-n##]\n"); - } - tcp=0; - break; - - default: - printf("usage: cmd [-p|-s][-n ##]\n"); - break; - } - } - - if ((port=atoi(argv[argc-1]))!=-1) - { - port=htons(port); - } - dest=argv[argc-2]; - - - if (source == -1) - { - printf("usage: cmd [-p|-s][-n ##]\n"); - exit(1) ; - } - if (tcp==1) - { - printf("On utilise TCP\n"); - } - else - {printf("On utilise UDP\n");} - - - if (source == 1) - printf("on est dans le source\n"); - else - printf("on est dans le puits\n"); - - - if (nb_message != -1) - { - if (source == 1) - printf("nb de tampons à envoyer : %d\n", nb_message); - else - printf("nb de tampons à recevoir : %d\n", nb_message); - } - else - { - if (source == 1) - { - nb_message = 10 ; - printf("nb de tampons à envoyer = 10 par défaut\n"); - } - else - printf("nb de tampons à recevoir = infini\n"); - - } - - - //Envoi de message, Source en UDP - - int length_addr_dist; - length_addr_dist=sizeof(struct sockaddr_in); - - - - if(source==1 & tcp==0) - { - envoi_UDP(nb_message,port,30); - } - - //PUITS de réception en UDP - - else if (source==0 & tcp==0) - { - reception_UDP(port,nb_message,30); - } - - - else if (source==0 & tcp==1) - { - printf("On utilise TCP en puits\n"); - ServeurTCP(port, nb_message, 30); - } - - else if (source==1 & tcp==1) - { - printf("On utilise TCP en source\n"); - ClientTCP(port,nb_message,30); - } - - exit(0); -} - - diff --git a/tsock_v3 b/tsock_v3 index a5be025..394f233 100755 Binary files a/tsock_v3 and b/tsock_v3 differ diff --git a/tsock_v3.c b/tsock_v3.c index fd1f86e..855a51f 100644 --- a/tsock_v3.c +++ b/tsock_v3.c @@ -1,189 +1,189 @@ -//--------------------------PROG C ET RESEAUX----------------------- -//Nom : Quintana ----------------------------------------------- -//Prénom : Béranger ----------------------------------------------- -//Groupe : 3AE E ----------------------------------------------- -//------------------------------------------------------------------ - - -/* librairie standard ... */ -#include -/* pour getopt */ -#include -/* déclaration des types de base */ -#include -/* constantes relatives aux domaines, types et protocoles */ -#include -/* constantes et structures propres au domaine UNIX */ -#include -/* constantes et structures propres au domaine INTERNET */ -#include -/* structures retournées par les fonctions de gestion de la base de -données du réseau */ -#include -/* pour les entrées/sorties */ -#include -/* pour la gestion des erreurs */ -#include -/* fonctions de tsock*/ -#include "tsock.h" -/* pour afficher l'adresse d'un socket */ -#include - - -/********************************************************************** -Programme Principal -**********************************************************************/ - -void main (int argc, char **argv) -{ - - //Déclarations - - int c; - extern char *optarg; - extern int optind; - int nb_message = -1; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */ - int source = -1 ; /* 0=puits, 1=source */ - int tcp=1; //tcp=1 => tcp ; tcp=0 =>udp - struct hostent *hp; - - int port = -1; //Numéro de port - port =htons(port); - - char *dest ; - int lg =30; - - while ((c = getopt(argc, argv, "pn:sul:")) != -1) - { - - switch (c) - { - case 'p': - if (source == 1) - { - printf("usage: cmd [-p|-s][-n ##]\n"); - exit(1); - } - source = 0; - break; - - case 's': - if (source == 0) - { - printf("usage: cmd [-p|-s][-n ##]\n"); - exit(1) ; - } - dest=argv[argc-2]; - source = 1; - break; - - case 'n': - nb_message = atoi(optarg); - if (nb_message>100000) - { - printf("Trop d'envois, n> 100 000\n"); - exit (1); - } - break; - - case 'u': - tcp=0; - break; - - case 'l': - lg = atoi(optarg); - break; - - default: - printf("usage: cmd [-p|-s][-n ##]\n"); - break; - } - } - - if ((port=atoi(argv[argc-1]))!=-1) - { - port=htons(port); - } - dest=argv[argc-2]; - - if (source == -1) - { - printf("usage: cmd [-p|-s][-n ##]\n"); - exit(1) ; - } - - if (source == 1) - printf("SOURCE : "); - else - printf("PUITS : "); - - - if (tcp==1) - printf("Protocole de transport : TCP | "); - - else - printf("Protocole de transport : UDP | "); - - if (nb_message == -1) - { - - if (source == 1) - { - nb_message = 10; - printf("Nombre d'envois : %d | ", nb_message); - } - else - printf("Nombre de receptions : infini | "); - } - - else - { - if (source == 1) - { - - printf("Nombre d'envois = %d | ", nb_message); - } - else - { - printf("nb de tampons à recevoir = %d | ",nb_message); - } - } - - printf("Destinataire : %s\n", dest); - - - //Envoi de message, Source en UDP - - int length_addr_dist; - length_addr_dist=sizeof(struct sockaddr_in); - - - if(source==1 & tcp==0) - { - envoi_UDP(port,nb_message,lg,dest); - } - - //PUITS de réception en UDP - - else if (source==0 & tcp==0) - { - reception_UDP(port,nb_message,lg); - } - - - else if (source==0 & tcp==1) - { - - ServeurTCP(port, nb_message, lg); - } - - else if (source==1 & tcp==1) - { - - ClientTCP(port,nb_message,lg,dest); - } - - exit(0); -} - - +//--------------------------PROG C ET RESEAUX----------------------- +//Nom : Quintana ----------------------------------------------- +//Prénom : Béranger ----------------------------------------------- +//Groupe : 3AE E ----------------------------------------------- +//------------------------------------------------------------------ + + +/* librairie standard ... */ +#include +/* pour getopt */ +#include +/* déclaration des types de base */ +#include +/* constantes relatives aux domaines, types et protocoles */ +#include +/* constantes et structures propres au domaine UNIX */ +#include +/* constantes et structures propres au domaine INTERNET */ +#include +/* structures retournées par les fonctions de gestion de la base de +données du réseau */ +#include +/* pour les entrées/sorties */ +#include +/* pour la gestion des erreurs */ +#include +/* fonctions de tsock*/ +#include "tsock.h" +/* pour afficher l'adresse d'un socket */ +#include + + +/********************************************************************** +Programme Principal +**********************************************************************/ + +void main (int argc, char **argv) +{ + + //Déclarations + + int c; + extern char *optarg; + extern int optind; + int nb_message = -1; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */ + int source = -1 ; /* 0=puits, 1=source */ + int tcp=1; //tcp=1 => tcp ; tcp=0 =>udp + struct hostent *hp; + + int port = -1; //Numéro de port + port =htons(port); + + char *dest ; + int lg =30; + + while ((c = getopt(argc, argv, "pn:sul:")) != -1) + { + + switch (c) + { + case 'p': + if (source == 1) + { + printf("usage: cmd [-p|-s][-n ##]\n"); + exit(1); + } + source = 0; + break; + + case 's': + if (source == 0) + { + printf("usage: cmd [-p|-s][-n ##]\n"); + exit(1) ; + } + dest=argv[argc-2]; + source = 1; + break; + + case 'n': + nb_message = atoi(optarg); + if (nb_message>100000) + { + printf("Trop d'envois, n> 100 000\n"); + exit (1); + } + break; + + case 'u': + tcp=0; + break; + + case 'l': + lg = atoi(optarg); + break; + + default: + printf("usage: cmd [-p|-s][-n ##]\n"); + break; + } + } + + if ((port=atoi(argv[argc-1]))!=-1) + { + port=htons(port); + } + dest=argv[argc-2]; + + if (source == -1) + { + printf("usage: cmd [-p|-s][-n ##]\n"); + exit(1) ; + } + + if (source == 1) + printf("SOURCE : "); + else + printf("PUITS : "); + + + if (tcp==1) + printf("Protocole de transport : TCP | "); + + else + printf("Protocole de transport : UDP | "); + + if (nb_message == -1) + { + + if (source == 1) + { + nb_message = 10; + printf("Nombre d'envois : %d | ", nb_message); + } + else + printf("Nombre de receptions : infini | "); + } + + else + { + if (source == 1) + { + + printf("Nombre d'envois = %d | ", nb_message); + } + else + { + printf("nb de tampons à recevoir = %d | ",nb_message); + } + } + + printf("Destinataire : %s\n", dest); + + + //Envoi de message, Source en UDP + + int length_addr_dist; + length_addr_dist=sizeof(struct sockaddr_in); + + + if(source==1 & tcp==0) + { + envoi_UDP(port,nb_message,lg,dest); + } + + //PUITS de réception en UDP + + else if (source==0 & tcp==0) + { + reception_UDP(port,nb_message,lg); + } + + + else if (source==0 & tcp==1) + { + + ServeurTCP(port, nb_message, lg); + } + + else if (source==1 & tcp==1) + { + + ClientTCP(port,nb_message,lg,dest); + } + + exit(0); +} + +