From 4df267d543a17606ca463560e4885046be87b6ce Mon Sep 17 00:00:00 2001 From: BQUINTAN Date: Sat, 9 May 2020 19:14:21 +0200 Subject: [PATCH] Fin du projet. Serveur Fonctionnel --- bal.h | 731 +++++++++++++++++++++++++++++++++---- makefile | 5 +- readme.txt | 122 +++++++ tsock | Bin 0 -> 36328 bytes tsock.h | 990 +++++++++++++++++++++++---------------------------- tsock_p2 | Bin 25320 -> 0 bytes tsock_p2.c | 240 ------------- tsock_v0.c | 80 ----- tsock_v1_1.c | 157 -------- tsock_v3 | Bin 25320 -> 0 bytes tsock_v3.c | 189 ---------- tsock_vf.c | 258 ++++++++++++++ 12 files changed, 1493 insertions(+), 1279 deletions(-) create mode 100644 readme.txt create mode 100644 tsock delete mode 100644 tsock_p2 delete mode 100644 tsock_p2.c delete mode 100644 tsock_v0.c delete mode 100644 tsock_v1_1.c delete mode 100755 tsock_v3 delete mode 100644 tsock_v3.c create mode 100644 tsock_vf.c diff --git a/bal.h b/bal.h index add12b3..b87f0c7 100644 --- a/bal.h +++ b/bal.h @@ -1,71 +1,660 @@ -// -// 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 +//--------------------------PROG C ET RESEAUX----------------------- +// Nom : Quintana +// Prénom : Béranger +// Grp : 3AE E +//------------------------------------------------------------------ + +#ifndef __tsock__ +//Variable qui donne la longueur max d'un message +int maxsize=9999; +//Définitions des types + +typedef struct BAL +{ + int num ; + int nb; + struct LETTRE * l_first ; + struct LETTRE * l_last ; + struct LETTRE * l_current ; + struct BAL * suiv ; +}BAL ; + +typedef struct LETTRE +{ + int num ; + int lg; + char *message ; + struct LETTRE * suiv ; +}LETTRE ; + +typedef struct LISTE_BAL +{ + struct BAL * first ; + struct BAL * last ; + struct BAL * current ; + int nb; +}LISTE_BAL; + +//--------------------------------------------------- +//---------Déclaration des fonctions----------------- +//--------------------------------------------------- + +LISTE_BAL* init_BAL(); +void add_BAL(int num , LISTE_BAL* liste); +BAL* find_BAL(LISTE_BAL*liste, int num); +int find_BALR(LISTE_BAL*liste, int num); +void add_LETTRE (int n, int lg, BAL* bal , char* mess); +void printBAL(BAL* bal,int lg); +void empty(BAL*bal); +void EBAL(int port, char* dest, int nb_message, int lg_msg, int nBAL); +void SBAL(int port, char* dest); +void RBAL(int port, char* dest, int nBAL); + +//--------------------------------------------------- +//--------------------GESTION BAL-------------------- +//--------------------------------------------------- + +LISTE_BAL* init_BAL() +{ + LISTE_BAL* liste =(LISTE_BAL*)malloc(sizeof(struct LISTE_BAL)); + liste->first = NULL; + liste->last=NULL; + liste->current = NULL; + liste->nb=0; + return liste ; +} + +//------------------------------------------------ +//----Afficher le contenu d'une Liste de BAL------ +//6----------------------------------------------- +void printLISTE(struct LISTE_BAL* liste) +{ + printf(" __________________________________________\n"); + printf(" Check général des BAL de notre liste :\n\n"); + printf(" %d BAL dans notre liste \n\n",liste->nb); + liste->current=liste->first; + while (liste->current!=NULL) + { + printf(" BAL n°%d : %d Lettres \n",liste->current->num,liste->current->nb); + liste->current=liste->current->suiv; + } + printf(" __________________________________________\n\n"); + +} + +//------------------------------------------------ +//--------Afficher le contenu d'une BAL----------- +//------------------------------------------------ +void printBAL(BAL* bal,int lg) +{ + printf("Contenu de la BAL n°%d qui contient %d lettres \n",bal->num,bal->nb) ; + bal->l_current=bal->l_first; + printf("\n"); + int n=1; + while(bal->l_current!=NULL) + { + printf("BAL n°%d | %d Lettres, lettre n°%d : [",bal->num,bal->nb,n); + afficher_message(bal->l_current->message,lg); + bal->l_current=bal->l_current->suiv; + n++; + } + printf("\n\n"); + +} +//------------------------------------------------ +//----------------Ajouter une BAL----------------- +//------------------------------------------------ + +void add_BAL(int n, LISTE_BAL * liste) +{ + BAL *nouv =malloc(sizeof(struct BAL)); + nouv->num=n; + nouv->nb=0; + nouv->l_first=NULL; + nouv->l_last=NULL; + nouv->l_current=NULL; + nouv->suiv=NULL; + + if (liste->first == NULL) + { + liste->first = nouv ; + liste->last = nouv ; + } + else + { + liste->last->suiv= nouv ; + liste->last=nouv ; + } + liste->nb++; +} + +//------------------------------------------------ +//----Retourne une BAL en fonction de son num----- +//6----------------------------------------------- + +BAL* find_BAL(LISTE_BAL*liste, int num) +{ + BAL* bal=malloc(sizeof(struct BAL)); + liste->current=liste->first; + if (liste->first==NULL) + { + add_BAL(num,liste); + bal=liste->first; + } + else + { + liste->current=liste->first; + + if (liste->first==liste->last) + { + if (liste->first->num==num) + bal=liste->current; + else + { + add_BAL(num,liste); + bal=liste->last; + } + } + else if (liste->first->num==num) + bal=liste->first; + else + { + int var=0; + while(var==0) + { + if (liste->current->suiv==NULL) + var=-1; + else + { + liste->current=liste->current->suiv; + if (liste->current->num==num) + var=1; + if (liste->current==NULL) + var=-1; + } + + } + if (var==1) + bal=liste->current; + else + { + add_BAL(num,liste); + bal=liste->last; + } + } + } + return bal; +} + +//-------------------------------------------------------------------------------------------- +//----------------------------------------findBALR-------------------------------------------- +//-------Retourne -1 si BAL inexistante ou BAL Vide, lg 1ère lettre si BAL existante---------- +//-------------------------------------------------------------------------------------------- +int find_BALR(LISTE_BAL*liste, int num) +{ + int ret; + if (liste->first==NULL) + { + ret=-1; + } + else + { + liste->current=liste->first; + if (liste->current==liste->last) + { + if (liste->current->num==num) + { + if (liste->current->l_first==NULL) + ret=-1; + else + ret=liste->current->l_first->lg; + } + else + ret=-1; + } + else if (liste->first->num==num) + { + if (liste->current->l_first==NULL) + ret=-1; + + else + ret=liste->current->l_first->lg; + } + else + { + int var=0; + while(var==0) + { + if (liste->current->suiv==NULL) + var=-1; + else + { + liste->current=liste->current->suiv; + if (liste->current->num==num) + var=1; + if (liste->current==NULL) + var=-1; + } + + } + if (var==1) + { + if (liste->current->l_first==NULL) + ret=-1; + else + ret=liste->current->l_first->lg; + } + else + ret=-1; + } + + } + return ret; +} + +//----------------------------------------------------------------- +//----------------Ajouter une lettre en fin de BAL----------------- +//----------------------------------------------------------------- + +void add_LETTRE (int n, int lg, BAL* bal , char* mess) +{ + bal->nb=(bal->nb)+1; + LETTRE* nouv; + nouv=(LETTRE*)malloc(sizeof(LETTRE)); + nouv->num=n+1; + nouv->lg=lg; + nouv->suiv=NULL; + + if (bal->l_first==NULL) + { + bal->l_first=nouv; + bal->l_last=nouv; + bal->l_current=nouv; + } + + else + { + bal->l_last->suiv=nouv; + bal->l_last=bal->l_last->suiv; + } + + nouv->message=malloc(lg* sizeof(char)); + for (int i=0 ; imessage[i] = mess[i]; +} + +//------------------------------------------------------------------------------------- +//----------------Détruit une liste de BAL en fin d'utilisation de BAL----------------- +//6------------------------------------------------------------------------------------ + +void empty(BAL*bal) +{ + bal->l_current=bal->l_first; + while(bal->l_current!=NULL) + { + bal->l_current=bal->l_current->suiv; + free(bal->l_first); + bal->l_first=bal->l_current; + (bal->nb)--; + } +} +void EBAL(int port, char* dest, int nb_message, int lg_msg, int nBAL) +{ + //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)); + int envoi=-1; + int lg_pdu=50; + int lg_recv; + char*pdu=malloc(lg_pdu*sizeof(char)); + +//--------------------------------------- +//--------Etablissement connexion-------- +//--------------------------------------- + printf(" SOURCE : Emission de lettres pour la BAL n°%d\n",nBAL); + printf("____________________________________________________________________\n\n"); + + sprintf(pdu,"0 %d %d %d",nBAL, nb_message,lg_msg); + + //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"); + exit(1); + } +//----------------------------------------- +//----------------Envoi PDU---------------- +//----------------------------------------- + + if ((envoi=write(sock,pdu,lg_pdu))==-1) + { + printf("Echec de l'envoi du PDU Emetteur (fonction write en défaut)\n"); + exit(1); + } + //----------------------------------------- +//----------TRANSFERT DE DONNEES----------- +//----------------------------------------- + + + + for (int i=1; i<=nb_message;i++) + { + printf("SOURCE : lettre n°%d (%d) [", i,lg_msg); + + //Création du message + construire_message2(message,motif,lg_msg,i); + printbuffer2(nBAL,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); + } + + //Fermeture Socket + if (close(sock)==-1) + { + printf("Echec de la fermeture du socket distant"); + exit(1); + } + + free(message); + free(pdu); + printf("Envoi effectué avec succès\n"); +} + +void SBAL(int port, char*dest) +{ + //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; + int lg_recv=-1; + int lg_sent=-1; + int lg_pdu=50; + int type=-1; + int nb; + int lg; + int n=1; + int nBAL; + BAL*bal=malloc(sizeof(struct BAL)); + char *pdu;//=malloc(sizeof(char)); + LISTE_BAL* liste; +//---------------------------------- +//------------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; + + //Bind + if (bind(sock,(struct sockaddr *)&addr_local, lg_addr_local)==-1) + { + printf("Echec du bind.\n"); + exit(1); + } + //Check connexions entrantes + if (listen(sock,100)<0) + { + printf("Trop de connexions en attentes, échec de la demande\n"); + exit(1); + } + liste=init_BAL(); + while (1) + { + if ((sock2=accept(sock,(struct sockaddr*)&addr_distant,&lg_addr_distant))==-1) + { + printf("Refus de connexion par le serveur\n"); + exit(1); + } + + pdu=malloc(50*sizeof(char)); + if((lg_pdu=read(sock2,pdu, lg_pdu))<0) + { + printf("Echec de lecture du PDU entrant\n"); + exit(1); + } + sscanf(pdu, "%d %d %d %d", &type, &nBAL, &nb, &lg); + //GESTION EMETTEUR + if (atoi(pdu)==0) + { + printf(" ||||||| Réception des lettres pour la BAL n°%d |||||\n\n",nBAL); + message=malloc(lg*sizeof(char)); + int n=0; + sscanf(pdu, "%d %d %d %d", &type, &nBAL, &nb, &lg); + bal=find_BAL(liste,nBAL); + + while (n!=nb) + { + message = malloc(lg* sizeof(char)); + if ((lg_recv = read(sock2, message, lg)) == -1) + { + printf("Erreur de lecture\n"); + exit(1); + } + if (lg_recv>0) + { + add_LETTRE(n,lg, bal,message); + } + n++; + } + + printBAL(bal,lg); + } + //GESTION RECEPTEUR + else if (atoi(pdu)==1) + { + sscanf(pdu, "%d %d", &type, &nBAL); + printf(" ||||||| Restitution des lettres de la BAL n°%d |||||||\n\n",nBAL); + lg=find_BALR(liste,nBAL); + if (lg==-1) // Gestion du cas ou la BAL est vide, on envoie un PDU qui sera analysé par le récepteur. + { + printf(" BAL inexistante, PDU=0 pour informer le récepteur\n\n"); + sprintf(pdu,"%d %d",lg,nb); + //printf ("PDU à envoyer : %d\n",lg); + int lg_sent=-1; + nb=1; + if ((lg_sent=write(sock2,pdu,lg_pdu))==-1) /*,0,(struct sockaddr*)&addr_distant,lg_addr_distant)*/ + { + printf("Echec de l'envoi du PDU (fonction write en défaut)\n"); + exit(1); + } + } + else + { + bal=find_BAL(liste,nBAL); + bal->l_current=bal->l_first; + + while(bal->l_current!=NULL) + { + lg=bal->l_current->lg; + nb=bal->nb; + sprintf(pdu,"%d %d",lg,nb); + + if ((lg_sent=write(sock2,pdu,lg_pdu))==-1) /*,0,(struct sockaddr*)&addr_distant,lg_addr_distant)*/ + { + printf("Echec de l'envoi du PDU Emetteur (fonction write en défaut)\n"); + exit(1); + } + message=malloc(lg*sizeof(char)); + message=bal->l_current->message; + + if ((lg_sent=write(sock2,message,lg))==-1) + { + printf("Erreur lors de l'envoi du message n°%d\n",n); + exit(1); + } + printf("BAL n°%d : Restitution de la lettre n°%d (%d) [",nBAL,n,lg); + afficher_message(message,lg); + bal->l_current=bal->l_current->suiv; + n++; + } + empty(bal); + if ((shutdown(sock2 , 2))==-1) + { + printf("Erreur à la fermeture de la connexion : shutdown\n"); + exit(1); + } + } + } + else + { + printf("PDU non reconnu, on quitte par sécurité\n"); + exit(1); + } + printLISTE(liste); + free(pdu); + free(message); + } +} +void RBAL(int port, char* dest, int nBAL) +{ + //Déclarations + int sock; + struct sockaddr_in addr_distant; + int lg_addr_distant = sizeof(addr_distant); + struct hostent *hp; + char *message; //Penser au free en fin de programme pour libérer l'espace mémoire + int envoi = -1; + int lg_pdu=50; + int lg_recv=-1; + int lg; + int nb; + char *pdu = malloc(lg_pdu*sizeof(char)); + +//--------------------------------------- +//--------Etablissement connexion-------- +//--------------------------------------- + + sprintf(pdu,"1 %d",nBAL); + 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"); + exit(1); + } + +//----------------------------------------- +//----------------Envoi PDU---------------- +//----------------------------------------- + + if ((envoi = write(sock, pdu, lg_pdu)) == -1) /*,0,(struct sockaddr*)&addr_distant,lg_addr_distant)*/ + { + printf("Echec de l'envoi du PDU Emetteur (fonction write en défaut)\n"); + exit(1); + } + char*lgmsg=malloc(maxsize* sizeof(char)); + nb=10; + int n=1; + lg_recv=1; + printf(" PUITS : Réception du contenu de la BAL n°%d\n",nBAL); + printf("____________________________________________________________________\n\n"); + + while(n<=nb) + { + if ((lg_recv=read(sock,lgmsg,lg_pdu))==-1) + { + printf("Erreur à la réception du PDU de longueur de message\n"); + exit(1); + } + sscanf(lgmsg,"%d %d", &lg , &nb); + if (lg==-1) + { + printf(" ATTENTION : Pas de courrier à récupérer dans la BAL n°%d\n\n",nBAL); + exit(0); + } + + message=malloc(lg*sizeof(char)); + if ((lg_recv=read(sock,message,lg))==-1) + { + printf("Erreur à la réception du message\n"); + exit(1); + } + printf("PUITS : Réception de la lettre n°%d : [",n); + afficher_message(message,lg); + n++; + } + + printf("Fermeture de la Connexion\n"); + //Ciao le socket + if(close(sock)==-1) + { + printf("Impossible de fermer le socket"); + exit(1); + } +} + +#endif \ No newline at end of file diff --git a/makefile b/makefile index 2b06da4..527dde1 100644 --- a/makefile +++ b/makefile @@ -1,3 +1,2 @@ -tsock: tsock_p2.c tsock.h - gcc tsock_p2.c -o tsock_p2 -g - +tsock: tsock_vf.c tsock.h bal.h + gcc tsock_vf.c -o tsock -g \ No newline at end of file diff --git a/readme.txt b/readme.txt new file mode 100644 index 0000000..e4ac6e7 --- /dev/null +++ b/readme.txt @@ -0,0 +1,122 @@ + __________________________________________________________________________ + || Projet de Programmation C orientée réseaux || + || || + || Prénom : Béranger || + || Nom : Quintana || + || Groupe : 3AE E || + ||______________________________________________________________________|| + +Bonjour, bienvenue sur ce programme d'échanges basé sur les protocoles TCP et UDP. +Avec ce programme vous pourrez utiliser ces protocoles sous différentes formes : + + -De manière classique, avec un puits (-p) qui reçoit les informations d'une source (-s) + -Avec une nouvelle fonctionnalité de serveur de Boite aux Lettres + +La fonctionnalité qui sera lancée au démarrage du programme sera celle de BAL. + +________________________________________________________________________________________________________________________ + Lancement de tsock +________________________________________________________________________________________________________________________ + +Pour lancer le programme, ouvrez un terminal dans le répertoire de travail, puis tapez la commande : + + make + +Cela compilera vos fichiers. Vous pourrez par la suite lancer vos différents programmes. +________________________________________________________________________________________________________________________ + USAGE de la Boite Aux Lettres +________________________________________________________________________________________________________________________ + ========================== + LANCEMENT D'UN SERVEUR BAL + ========================== +Ici on peut lancer un serveur de Boites aux lettres sur une adresse IP et un port donné. Ce serveur se comporte comme +une boucle infinie qui stocke les messages entrants dans des Boites aux lettres et les délivre par la suite après +requête d'un récepteur. + +Pour lancer notre serveur BAL, il faut utiliser l'option -b du programme et lui attribuer un port d'écoute + Exemple, je veux lancer un serveur BAL sur le port 9000 : + Commande à utiliser : + ./tsock -b 9000 + + ==================== + EMISSION DE MESSAGES + ==================== + +Pour envoyer une ou plusieurs lettres, à un boite aux lettres, il faut utiliser l'option -e# du programme avec # le +numéro de Boite aux lettres destinataire, ainsi que fournir l'adresse IP du serveur, et le port d'écoute. + Exemple je veux envoyer des messages à la BAL n°5 sur l'IP 127.0.0.1, sur le port 9000 + Commande à utiliser : + ./tsock -e5 127.0.0.1 9000 + + NB : si vous ne précisez pas le numéro de BAL cela envoira par défaut sur la BAL n°0 + +Options disponibles pour l'émetteur : + -n# : fixe le nombre de message à émettre avec # le nombre de messages + -l# : fixe la longueur des messages à émettre avec # la longueur des messages pour cet envoi. + ATTENTION : On ne peut pas envoyer de messages plus court que les messages présents dans la BAL sous peine de + rogner les messages ces derniers. Le programme ne vous en informera pas lors de l'envoi... + En revanche, on peut envoyer des messages plus long que ceux précédemment envoyés. + + ===================== + RECEPTION DE MESSAGES + ===================== + +Pour récupérer les lettres d'une boite aux lettres le principe est le même : + Exemple : Je veux récupérer les lettres de la BAL n°5, à l'IP 127.0.0.1, sur le port 9000 : + Commande à utiliser : + ./tsock -r5 localhost 9000 + + Vous ne pouvez ici que récupérer l'ensemble des lettres disponibles dans une des Boites aux lettres. + Les options -n et -l ne sont donc pas utilisables. + +======================================================================================================================== +======================================================================================================================== + +Avec ces fichiers vous pourrez également utiliser TCP et UDP dans des usages plus classiques d'envois et réceptions +directes + +________________________________________________________________________________________________________________________ + USAGE CLASSIQUE +________________________________________________________________________________________________________________________ + + -Il est nécessaire d'activer le puits en premier et en lui attribuant une adresse IP distante ainsi qu'un + numéro de port + Exemple : Je veux recevoir depuis l'hôte local sur le port 9000 + Commande à utiliser : + ./tsock -p localhost 9000 + + Seulement après avoir activé notre puits, on peut lancer notre source toujours en lui attribuant l'IP destinataire + et le numéro de port ou l'on veut envoyer nos informations. + Exemple : Je veux envoyer à destination de l'hote local sur le port 9000 + Commande à utiliser : + ./tsock -s localhost 9000 + +Liste des options : + + -n : permet de fixer le nombre de messages à envoyer (par défaut : 10) + -l : permet de fixer la longueur des messages à envoyer (par défaut 30) + -u : permet d'utiliser le protocole UDP car TCP est utilisé par défaut + + Pour l'usage classique, il est important que l'utilisateur du puits, paramètre correctement la longueur des + messages à recevoir pour pouvoir les recevoir correctement, sinon, la longueur par défaut sera de 30 caractères. + + De plus, concernant le nombre de messages, si l'utilisateur du puits utilise l'option -n, et que le n du puits + est inférieur au -n du récepteur, il ne recevra pas les denrniers messages. + +________________________________________________________________________________________________________________________ + Remarques Générales +________________________________________________________________________________________________________________________ + + -En principe, l'utilisation de fonctions de la partie Classique sur une serveur BAL ne fonctionne pas. + Par exemple, l'envoi depuis une source TCP (-s) vers un serveur BAL (-b) en fonctionnement contenant déjà des + lettres, enverra les lettres sur la dernière BAL utilisée. L'envoi depuis une source vers un serveur BAL ne + contenant pas de lettres sera bloquant. Il faudra relancer le serveur BAL pour pouvoir recevoir des lettres. + + -La problématique de la longueur des messages à recevoir côté serveur n'a pas pu être traitée par manque de + temps. + + -Il reste surement des coquilles.... + +Si besoin, n'hésitez pas à me contacter : bquintan@etud.insa-toulouse.fr + +Bonne correction! \ No newline at end of file diff --git a/tsock b/tsock new file mode 100644 index 0000000000000000000000000000000000000000..bf0adb428b6e3b2c595ec0e51045ebae668cacc8 GIT binary patch literal 36328 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 - 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 +// Grp : 3AE E +//------------------------------------------------------------------ +#ifndef __tsock__ +//--------------------------------------------------- +//-------------Déclaration des fonctions------------- +//--------------------------------------------------- + +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 ----------------- : Construit notre message à partir de l'alphabet +//--------------------------------------------------- +void construire_message2(char *message, char motif, int lg, int i) +{ + char alphabet[] = "abcdefghijklmnopqrstuvwxyz"; + if (i>=27) + { + if (i%26==0) + motif = 'z'; + else + motif = alphabet[i%26-1]; + } + + else + motif=alphabet[i - 1]; + + for (int j=0;j=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; + } +} + +//---------------------------------------------------- +//-------------Affichage des messages----------------- +//---------------------------------------------------- +void afficher_message(char *message, int lg) + +{ + for (int i=0;ih_addr, hp->h_length); + + for (int i=1; i<=nb_mess ; i++) + { + printbuffer2(i,message); + construire_message2(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); + } + 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); + } + + + lg_dist=sizeof(addr_distant); + + int i=1; + while(recv!=0) + { + 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); + } + + if (recv!=0) + { + printf("PUITS : Réception n°%d (%d) : [",i,lg_message); + afficher_message(message,recv); + } + if (i==nb_message) + { + recv=0; + printf("On a atteint le nombre de messages à recevoir\n"); + } + + i++; + } + + 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)); + 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"); + exit(1); + } + + //Connexion Réussie ! + +//----------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_message2(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; + //Bind + + if (bind(sock,(struct sockaddr *)&addr_local, lg_addr_local)==-1) + { + printf("Echec du bind.\n"); + exit(1); + } + + //Check connexions entrantes + + if (listen(sock,100)<0) + { + printf("Trop de connexions en attentes, échec de la demande\n"); + exit(1); + } + + //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); + } + + //Reception des messages au niveau du socket d'échange + +//--------------Reception des données----------- + int i=1; + while(lg_recv!=0) + { + + if((lg_recv=read(sock2,message, lg_msg))<0) + { + printf("Echec de la lecture du message entrant \n"); + exit(1); + } + if (lg_recv!=0) + { + printf("PUITS : Réception n°%d (%d) [" , i , lg_msg); + afficher_message(message, lg_recv); + i++; + } + } + + //Ciao le socket + if(close(sock)==-1) + { + printf("Impossible de fermer le socket"); + exit(1); + } + free(message); +} + +#endif diff --git a/tsock_p2 b/tsock_p2 deleted file mode 100644 index 4f45a392251e4e11782586e952963f8c4efe633c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25320 zcmeHvdwf*Ywf{LYc^r~V9)uuoP7nl?Bm@u z$0>zM8sHR$g@MR*R*?BHQV401$R!`CM|@fl)l#m<<>!TBGMD|MzR~{@(Z9reE|a1tGACL} z)u+QADxaFfz<&8gj#gwY`MwN3((_+Uxq@(!XfK&vG+_^!i|#5VjlSBMGfEmgMU6gx zWKGeUSu=}f&L|EAil?!DlYFARbwLeliNpv~u=*i@2}kueKKR|Dt*EE85bcWH6MZNSJW5R`Sl>XzHzYgZ5fv5(1b4K!T%@; z{;4GR(Mj+W3j@W&ge3T>N$k@B`f>PAOqoCoB>zF+^ORvq?o^$z$azM=ICRsno2i5X z?v>uK;$7nlD-Gd*Kcs}3gFb(_PH_kPey=;MG)KZA#pw)%UG9}mcf(3&oy*rqSa*Xf z2uY!^*RM2rn?ev%>+^e*px5P5>b>DWb65#AM8clHYDVC0UaK^@8XE&{khoXX1p`eA zXk5X1qHYL;!nJGtt|qVI3I}|OyD<>*Dj~1m6AmaYx7!P8PN#c~%US31yBdA#ya1^m zq**ZRY;yVh%Icsm>{aT5UaxZN{K`2M&S}M^GmK)aG_Ckr#aX$e%IWb2z4g?E;F79} z#(>|u#8ul!lIxoSej(Y(Ne3jP`H5yIx>_(d@jP~=`8)>2N|J-Q1@o1a%~^7OeQf*V zn3hwNQ>Z4~5TDORGv9{-j*RdPA_;%v?8bdb`ga?sS(5i10agpVmJkmTK2f4GO1dY| zJS$VT37;*I$a_q9sXJAlH{s>InDCcOcp57*$@rvuw4AG{E?3Z}ql_V8q+uq!ygyK- zZoER1@BOADm^vQ`<6?nefuqROc|^;TR)ToA4P1R#BFk@HBR1T5iIN zr4*}bFyWE0{T4immWB9XV7@Iy`b z-6lNUyJXsH!Vi;3c)B;reU(iV}dD^dUF~4J%Y0dRv7#Y!4y)x=RXHx!nX;g zA>P}~;716i(CR(T;0Fn&km~JZ@B;)>DE01T@H&DignHW<93+@Rr*|8JR}f4g(|aF- zYYC=M>1}54odi>e^e#8}>$U-Asq}-&=o|MqqVG9cPo1w`GJk98r;zQ~YHMZLO=F>H zU%^$7aUo~yT&lUL5+7y7&KbLr$zOJuq96u? ze-QC)z1G6SO#U4FjzgbY9ntfSLp`@R)K?vEd>$SKfro^^EE1SZ-hDR_nGz{+wBGbh zD%FraS&p`wz743y1`qT&aCtTLTYyzk=RQ*GFNYx#{UP#Yy>+0V5~6##Bf6m@dOljS zH(Ir4i~R+Uqb+5^Byc#Q_DiLmjt*C?+vBaPZ*c7MtytOEJdWvH>2PY#&oB4&y>?jiE;qX2a_ff6gIb2R z*)K<5g*UE5Xwl+G={W>Ks>^xm6=d$5Cp!y|Z|n>kl&V4bO-|_s<^3Bj|JkZ2{fOU1 z1aq+~KrE>kea^%I=$|*}XLEW+#ps{ftoE0Gzd@hD=@}KHzhzENfBM@E`gi`$^dYKy zhr$4JP}36u@@1NodY*^4ZHB$dq8pAmqLI#oD7b&aF=~(TTZsQ!gMTIXTQ?jV)H1!x zev<5Zc1WB3q{Dq2e(7|m$6r;7TJ0y*)(t1E_r4F0ZmpimYFax}w&W5cGygGZ{+x~f z1{q!UZYioeK~y(Hbz2~+=9puv{Q?How=kJFqFvnj$DkOKzqQ(mc)75}(pGhBUwvI& z9gjnc5r>DmE$VT#lVUMyKNb^rn_1k3n79-!4l46FIA)52oQ>}@txrj!xWjZ2Gy7;epOYQ%T1AHn8Mdd zE%md;gJx+j{mrn(7clHCW>LYIs4o~<=W&-b`gvtcT+Fb>B*2E7m}GJ`-pdSoPFnO_ zf<@24qUYi)y4l>)PcQZL<-AyPfriDFTpAAFZ+o|aTQkdK&0Ne={j7PTSyBL!#Nhg3 zzWHyg8w?8+#-x1#-#lv;_4Z#4#lE0#mYBtTJtj{0rr%x0bJ28{S^odUJv6t?z9;Uk zDsQA$(2bN$$jR=azwg(-jh~qMr=x#8(a5PT`(+k`V{kL&0(&sS=e(%o9PEsC_2h!5 z)qWXw=gT+PPpy9kHyZ^D#~uy%*ezyxbi;vYq$67Mf+JeBJK;vtWj}&3r?lB$z?~l= zw}O?H8~ZRPDF-dMyiAv#0+>H)KiazCXkUbGYENLn+S7hP-qhYEwypN=eI)E4{weBu zx>1i+O1A~_57b5N?;)0VQ$;#&<%FYk!wH4S^OL-4L*8a0XtSSaD;vW5eZtXJhBX`3 zbyeMt)15sRxzOqd!HaK-DRr!tDxoA>Q$eSh@Fn_b;;JzeBa7tp==} zj_BK>W7|-GQYb8bZwdb@b|Mpp?D(8;M?Lh~7(88+P|a(!1=t z>4~Vz-a)N&*$s@a;gX|}T^aqG$sbve5w#y_-Ef3!zl)le+bgY*Xb?t3?)C1_s-GO7J=5`Ew!X_${u)z2rt zM780QX2T~KX*&}9VvIE5o+}}aMp~EsC?cY79}J)zBs1^6%GdO7OIRW$0@*xrr`v}hW2uR>_gJLhE&b4lL6FzS|)AdDGIb0){X2P~N` z3)*fb!S_S39Gq?F81oAsg}aU3>;X~E!N|*O678qY%U@nxbzs#F^)*Wu(ZZ4`mOFNk=&tcjr9hV}tP+o9Mv(Aqb`S?;_5F2ImC` zMk^q?8YLnkuhbd+IAu`&9QCpv_W%pBdXg1HxnKNj1=5J0q+=T6gfO&i%Kv#W>QlU-V3YOddU5cDB0a-H0hAbCyNt2+B}%mO_RlA z)IGW{qI>(nB@NL+VjeWabh5^2s=p|R^3aDz4CVF$OXH0qeg?|@q9XvL5gqbT5i>7& zyUTupXD4aWz+IL@r+C&wS)2V-&VSOZb{*tU$&MApIofUOT@I!;`}x+M+SW_?IbWX( zFbW3`*@Q|=>Zz5O``S`0Y&K545dhX5eciZStL%3D0rtOoo<1k-^&7~CKE&Ib22sXs z{bxkC)}Z?#=*R~<9EZBC*l0M9-qSNH-Pp1F0TI-f-ovCrTWWcp&Xy5(fGcW$>;4UI zwbPUOL%XPY>rJgBd$b{YG1GxP5%)g81t>zmFec#KSwE~q4V?AT6A|mkG7@s)tn5fO z6T*n(6V>&gSQ?nkamj3st{xYoJ%tC^zHq+b%ast#eQ9P*up}JNm-865S-O#lZ5HS@6Wf?Q zXU@pp>S%zGY}&$|rbhBXH5}UV(UXI=&Qi?g8mPXmPmp zrtt>e0eqMJ0?nNyk{RZtA`OGR#i~nfHRswQZ^6hIEk|&#>3xT(dLq+)a#LsI3aYMR z)pV0ti^Xs+Ef66MVqoTz5X#M*KspY$sosa;8a7DRB{uvMJO-Whz$0A69z(@!bceQ} zdy0EOF((PdGNQ;L3Oz<)v_`k(+nN6{H@pmulpY;+DgR3O?Um8rl-HDFZ+60q8Eosd zi1Nkd(a$QQ7w1o=T}#bz=re1N6ReI+AB6SNcjbQR{OG6iqZj8!KP>MXa?;UySan?g zyT}>Zv%hOu`Q7Eq%I_(69^Mw)pZyC4Hnx9eX2s=!)rP@m+#xpXQ^x&q>5B+niUdLu!iYIN!D;Nj<7VPC+n zdm_4ctttrOUvDm6ShJ|YuFux(5be|buk4-R(I-vtOxEv`62)szySu^b7UDhLP&gQI zCpN$+(BK?;^D3Id+f}b`l~-qPSV_<7n#v`M(cq%P&(V8S($UoFY{^Icm>7tx@&?0^ zpqIL_n7tj=7l-jqw@H%0Ktbd6~;Sa zQ1dz}!%$E#6!EQcQH5gIgv^~_6WE#e5|StKdZ;FRq)(~~__trTVJ1*TsF5Rhn@TM60D%^42x;nfcj~sqZcdde(LJ_z7 z@a|Be98*|KjQB-h=y(b4YLx9obb4W#3lH@FHRN<>KiI1UhfCh?8bHy#Dj)bLvn-PiwByUx~)*Z;iz%BJQ( zDCEN%cIpGOFxQeFLWt0yo2|Q>Jo;Tl&FhOo%kC=j>sMa6Oc;hcA9nEHtYa+d7>!)+ zLd3IIZ}vvQ=r=~~_Ykiz7Tg`C@#zig7@HLNfTrk0K|K)Bi@Z}9aU+Jg#~WEgl1y^` zp$zg$)8X$mdG)ZjsX2s^RpezdgF22Og!;+t*Rl0Qwd;$#>x+U$51ak7Ly^YWwcgpm z*|E`Jc#QY6Iv5BC+yQPr@FkC@65C-aD? zn<4VounRyV+7< zOSAkI8gX6L1HByfptDOxz4aQE2#9|t{+nT^ne^6M@>@$&W&Hu5H)E~PjohfWylcom z3G_VJwJNUOVbos+K7{(WTd-83HYZBb~oC$-e8gX-HrN} z;I}bx^}~(&^{C$ue=bWg@sqAdWYe9fzl6AA6ZV|!+=nf5vWGonwP)*FQ|4q(`bMfF zd+O#iNA|4N^s4N#VD_x??5XA1ljdaWpacD!Y>k}-It4j8)^Mc8|EB-97LezvrpEYGUQv1XiUDbgALD0am-7x^cj_XVi9LpYy? z5~WU2z{;DYPEjw^P;L_nW{Ub@BBuiw=7cwIEL|$rSuSI2sVK<#1rI$e$+JA{WC}16 zzfBaR-X{b-_J&xJ?aMPck`6CSS^uCeL*dbt!PP<@wi{$UlY`;N;0#fZX_LXSAELSc zYneR9ohb04Fm#$Q@KBLoCGwdfpC|I$MP4WJRU+Rk^2bH~9g)8%@>fOvw#eTX`9+bZ zi2xib@~cEXQ{?kRe!Ix)M7~PoiT(O#usk<-YemIueNs(r#2=36*A-t|Jhfx5Wr~Tt-$xi!Y&`=2OIj>cKVZ@3`b6%m-q$j7O#Q#4NgM z>GvRrQc_ZJlvS~&q`LuGwbYqBE2T`;W<#{qlKx|8WL48{1Z24r%qbJ@A`zC&b|RvWD&Qfxa>PPOeLdA13l$;j>o4GpiHqdd2~3`F{(x73@xLQU+)S%%HP%#gh z3>vYOiXY*UG3E$pb6+L>GRFP|<-8h{GYbC;MVw>i{mPj9B#^e((6VA%3}LG66p9wx zW?)imzhXVI0k7E#VV5l1EhNac1m&T&5U!(bBrU3Oqxu23f{$Sn=DyXPo#GVZTGg-~I(fMf(BDgk<*1Q8Z$w8V08;8d=AR z21KOf{uxc?X8dXtPDlB1*(QRd^gWc-OLGe4(BPEj#eg<`oGAB0iPn@toS zaz}nZ<@01&OWx0L&G_gYFs0;OMdb@bt|=Nt|3(yrLb<;KiJn>eOQ7=TjAN#Uf>gKNkM5^S` zjF9zr60PMuK={j4&dpm6!mQ7zJS=Z7`jz!LmG!&_&}3F0l_wR{LuQtu5-_!3KdxCS z17;PFb+arCC@VNgEGZ0d6xc~tDg&wu{M1Mq1C|#25=v)jY8!CN3+Nu1m7#72&`_|B zq-Ck3aC3o5jpi~ST<|f~3|4obW=+A*2pFo?0=Tc>Ns@Mj>I3jVK?SZ^!_;p=T5G}I zNu5#ZcL8iExJWz`)Mr7kt>9sxvWnCn0N7FRI03~BXfJqzfD#7mF4#rDR0ixVc%Fc1 zY7uxk3jRusPG`Dx7W{&0u2sK}?1(b7jnw{jZaEqsmeo$3%&Q=Rr>UsqeT$TOhPtce zy-wxtFt5UUcLJBD(a2-78L7=egs|jIhJ8t5^OY+CV9&UQn!80Me8%@lt1@1G9*t#{ zvvTGc5Zb;@ZDyvy47M$-_!eMWlohvuAbSKUqCE$K(Qw@`C4DfmOu9d0k0i|S=W(%2 z{MBfXA+d!xa&;$d(vDcmDoKQO`+=4b??Sj`;%Nr%Z5ioSEK{h?vVA$5h%H4FOPMqg zTZ*Y-)F3LBaGJTJ>;z5akYi-n-K8R(aZWgs^+1@a+v0kxU&#UepGg}81iMG!vjiN1B%Ryf4A>-3v9XkTm>QB|5 zjO0}8F$G0+XAuULPHm%>n5^4(w&>Iw1K!c1-w1OU@MA57g)q2!K+t!z6h38!5403^ z!s_ZvD$NO&?PY}vsPTj9bquU7e2Hpb7TmjA3cp0vodVw5G7c6}52<9LE5}pAuc&mZ zEX*RM4zodM+3qN;K|j?ag6oBrF&~NLaD?|z8Shin&qei~7MP%r`0rLDVwqhAohhk1 zhhgE#O>noMmnM*~G=YR4YthLikVZbSZr>tI;uQSS1k2<5>@u_+PknT=K2l#;H$AMI z*6lxR;a&BLu9g*+ka_C_b4SaVhsBe?v#bMnfJav!7S(&HtJ}!Jqt!o(6*zmSWnDdO zbak|#mtB=Gy81BrL&DPAx*?ytvru%cj5}L`)rCvRFXIID3oV6TBNtvNV0fFkal9}b zI`e{9?r$=6rd*Jd--b7nI^CH=c|Ci8XMOnzmenIztL!6ru3mDAuEM zd~}wL`B*6WAEy3T4dbCdZZ@Dpq3|Y7DYGFb0-D=_|~LBxdq5NO#nKSCLPnjH0&-8r0^?c|`S?!1WShY5aE zNnWntSGaY#)RgFuCnd)Gq-2)0X6C0jGcBRnjg+)zc2_w(RKgZz__gH4 z8EdkcXoc;#p{VXG0}c5>++-S+iHohkkCjhLZ10XyatDp&4w4ZxHZFq3l0w$)Jc0xu zBWRqApy@&fyu4tE490Gxbdv=}%~L02=Vw~8M`q`#gVS>{Us;AK*6i7tH)N6(tmBo; z%$re3A#Jry=5Mbj7 zEcdM0H)oO@YLmEalfX0z+}W&v*(`?@FpcHrgE}))Qs&tVRcC>IaEcl)DgO#JMm!`& ztSAKnfMUcsRQ6d>uE>W>Qgv7%>@&Pry=6Ez$Hd`ep|W9*&lyfyjz~4ywqODsiH>R9 zY6Omo^^?HSv04OQCagXfQ`cBScxr-hT?mJI#9k<*32>Z{1`v1XSRL*|u^Qr=05K+| zuHp@o_7jb!GfhpS!#SANED9Y3QPsa^+i+#y5g@oE5(?5U#7pYk?h^bo+&OcG_?>vY zKT>jCiO=tDjNpYAqZ2@Xx>_H8u4*QU14{f}yobOqRh2NkqAhNqsAWZG^R!|&L7}h* zKaD{RbPBI+_J&Zzc#HV)^3Q`ZMil>XtJ56_dU++ua(O(#7~~C$a@d0{h@uECeva`` z4l6(lPc4d&hfezfF?uQj8(JH3dV@jwg{`P#ugRRG6h~krSmfBYj#ag~_boH>>n+9k zk!r<~Vtte@S`Dsh+HGk+(pG%GLAz7C8UK_&68nE-e|!0<(~sU~8Z+fD`Vpd~rvzal`8!&pR(G0r zxZo4wpPgiSL8!VWuIs4uRPm?zI3}b&9?2*-4`~GL^SFe85a&>+KV}6D)w@ zKERo8>sh1ae@#1}r{JWEQf(>CtkrA^&$9rR?wD(&a{pM6AY6*5>?tZQPO$a(;ho_Sv@ zcnO_*c)eD4HWFDCiA1#0Rd-pY6*TN`kKBce_Eh99tq`IpD~*&w&B!WT+as%|?YDNc z=+gt^Mb$8`LC;fKZ*&Gfk_@z1hpxf#6`DZ#KN(jIA21#Xg^`eDK z7CNhzR2${$$|}VfYQT%o+DM&&om){+4Q?8Dv%rWiM(7o#rFh+>J_G|Z|X1s63Yw$p@2xl(>{(7e3G-oM(7>*x~2kD353!P}y zS?j`Y)fX?U_>yzM!Uc2YqhKgvUrZT`s)3yy8ptB?^A0UXK$5xX|vVvC9Mp`ZVx0y6W*!0MUEma=IfyOo)w~qcIR@uEi$?gwv)^gL%Z)0cdtb1o)ln zyupCN)HlmxdccJ%y+PjeqPbN{i0N$@$G*5)X>hWy3y{|HD(Bms&5aR!?SPac6gxe_ zLXYNM1O{R-L=i=;PcsBnEQAADwBg0I$*80r^+R#uh=by4Y;JJXqIV=YgySJRLf~V> zbOR%#SzK|#QRp!<=QO-VH!LrmT3LPjOr@gH2Q4WINSug2w8v~x=W6mbu7#G7pxa9p zqk}*=2STTX@UmS>gwc&olE0utqYqIVGI~~3zLe3BO0d23i_5>3p~++l9YTVG-~u1U z1GhFCX;R-gcKecQhar>c>?8|%!|cArRHj19`X5H$o%=h+ONU2Bk6RnK1>b0pezM*NYG*E5Y4QKTNe?XikSNyYqy_NDd; zHk#NtVYB7jTNh!DkgF%m_1ySMNs~WZ;whOMa7UUD`k@kg7%RU}N#%mY<@%C9q%nYI zN~V{WES^?^Lof9etdlf-M4I_fgJIyuRSFL$W_V{@SIZrwotxD6;9QE)r^@O|G22oc zF)bI{zbs~6_K}g;Kw<{PK%{^+TOH4%|1{ATKjinT%*6B!5&7Mxc)V2!V;!29tXNCR z_rc~mtCFg84oIJ7yf2QYPgmr7)Oft6$oH@D_(6(%&l``=;9n{*BT=?ut5&`jH&y9>EinRmnEKGiI){;-rpz&mND@RrZcEV|dw$FXPDXWtnTO_>xY; zWHUz6=NsQyG1pq@)J&0XMzOM0DKNhKWv;X;LlyacJsyu|Td^YH#Xm5mxHA)MxU)DZi$}| z_{1IM(*i$r9Ow56IiE1R08AOZ%^FCb(Mj-hVj&mviJmauR*H7zcP!=bp3dZC8>dd> zKI*N&lbpo3rCnF@d*Z9er2?P$lFrTWrVfcByb2{{z4q8b}pPZZ?S!eb4mFe zJokc-eK*e?iZHF&_wvfhVn=z7cq!Zb7NR3W}#4wVsU){V3_s`ifPUQQGgB0VsC?( zr5dn}Wk8&jPgk5nmeB$>aNN*|o}Y^m6G}0rN_t=i&RZM7W+Z;2g5S|e5I-mh$g-;z zKSfz3A$$+mE6cFb08{rDLD3TrmS%Vs;7LAj%RKSPhiJ{|N&t9|X7J1Ba+&L9Vw7>) ziA$w`%>45CUFPHCsQdHJMLm8pKm*>hkHJ2gFl;4AYIM!YJz7lnG z23*2&A42A3#Eg`vKgTM{Iuyt!l3(su$ozyLlf1}`^Bk1HgcbP90f{C9Fg(UJn z1RTW_=|@TKf5;pw`nW{8no|^jnP2Xc$hRA-b`tKUYYh*r15{f*r|IZ12=|8!TBl8*3u!3LeEydDvH?=SM z<$jOM$-m~5*#66?H1o@SA(>B-f`yR8_Fn^@_BzBcGxm?!ZI5V`D*%s&TSmd&Ks z3xSDp6KUzxc_NPF_ypr2oYyg@MB3p=_^-a1bLAz(Un2j+B>Xp&asK>-fKTL~F8CAs zxnM5me@g}q2aUc;Ig}@;$S5a$i8E{y6Mzno+K_Q0?>|&6eUGA%I&fZ#QsY0-KMynm R@sGcQu`9H%Wljm8@;}-y9Bu#r diff --git a/tsock_p2.c b/tsock_p2.c deleted file mode 100644 index 071d6e7..0000000 --- a/tsock_p2.c +++ /dev/null @@ -1,240 +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" -/*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_v0.c b/tsock_v0.c deleted file mode 100644 index 168d258..0000000 --- a/tsock_v0.c +++ /dev/null @@ -1,80 +0,0 @@ -/* 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 - -void main (int argc, char **argv) -{ - 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 */ - while ((c = getopt(argc, argv, "pn:s")) != -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) ; - } - source = 1; - break; - - case 'n': - nb_message = atoi(optarg); - break; - - default: - printf("usage: cmd [-p|-s][-n ##]\n"); - break; - } - } - - if (source == -1) { - printf("usage: cmd [-p|-s][-n ##]\n"); - exit(1) ; - } - - 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 à envoyer = infini\n"); - - } -} - diff --git a/tsock_v1_1.c b/tsock_v1_1.c deleted file mode 100644 index 8187c52..0000000 --- a/tsock_v1_1.c +++ /dev/null @@ -1,157 +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" - - -/********************************************************************** -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 à envoyer = 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,50); - } - - //PUITS de réception en UDP - - else if (source==0 & tcp==0) - { - reception_UDP(port,nb_message,50); - } - exit(0); -} diff --git a/tsock_v3 b/tsock_v3 deleted file mode 100755 index 394f23376733949c4238f6480b536d16f343442c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 25320 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

5`@9D=xUXNv~!dC9-K=t`czX_ zBW7EQBc|md`xnK`%RVv^A4trg7>E?mW~<|Q^q(gB;)ncxm6@2nAtJx~l!&(~5v)U# zlND=8`99cOXI0Xbu0iQDjQ7Qf^qGo$kD7?r6#4!&5kEwc?|BpPS^P@{W+cj1Y}Ly5 z;^rzVHtu`mi)vGa6>rZUz$18avMRa8cgD<{y2u0$bA<0t1HQm zv}r(i7S}!&oDVdm9JihLQ)z`&JP$39*dLW|HF z=Z88WKlzQv-M|m_-LF6j`7z-2f$FgPN`d7HMV|AJB=mNCu>S64?Z)R@>~gTw&FFKL z6?&`5j9+yr(fa zxyGpzxsQ4~@FXWWZfVz*{GR+Oa*4nvzoc_Bys1N?NN?B&>sKrV{_zy}@29{YNr8VW z1^z6<=PJo>B|Zb5;w0G)SqK1qV7HX|HFUtdiHUbsAg>qF+3f$N9)LQe9lqa_TV zAc6z#Pz2w$X>7z!U;N8&&Pabo-Zj^-FW>=%T@I(+AtX5FEL5Dg&s%^))y@TT=Pt4@ zb}p`(jptqvvhU`(!%?O+`(9pUrTkzXeH%}F-7gXOk3N`39|=sPX3x`!D5saLwB?Ti zk}8wFFc`0$&Ob~TN05g6gM*1U{;Qcp9Q%x5BFeNCfyWJ(C$VJdG$ z8Q!Hp6Q5j+%OmUYuQn#)=y8dDF_efM`0z|EG=#nh~(v`$ zrOdM?0C_ye_9&~t54FPhiB$sNL|w@1cM*dqwfZAU84HCn6w8`|03)|7{~HAVY(Xc_xyyWs5KR1Z zC?uKxVc;mHNIyz)|3l_j(I+I*)tq7g%=~hnMCP4I0V|F`U`@)?qe=X7KSkzJUqNo@ zFY%8j@ym6w%!g8^O-Z&ZQO}@Y)_>QOaIAz9GOp-h86r$Zz-0Z zyQzK2FZX+7PX0Bg_{C!lI`Hkn-DV#&LlguyS^C*xk*}i -/* 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); -} - - diff --git a/tsock_vf.c b/tsock_vf.c new file mode 100644 index 0000000..be79a85 --- /dev/null +++ b/tsock_vf.c @@ -0,0 +1,258 @@ +//--------------------------PROG C ET RESEAUX----------------------- +// Nom : Quintana +// Prénom : Béranger +// Grp : 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); + int nb_lettres=3; + int nBAL=-1; + char *dest ; + int lg =30; + + while ((c = getopt(argc, argv, "pn:sul:be:r:")) != -1) + { + switch (c) + { + case 'p': + if (source == 1) + { + printf("ATTENTION :\n On ne peut être source et puits en même temps, Veuillez enlever une des deux options -s ou -p\n\n"); + exit(1); + } + source = 0; + break; + case 's': + if (source == 0) + { + printf("ATTENTION :\n On ne peut être source et puits en même temps, Veuillez enlever une des deux options -s ou -p\n\n"); + exit(1) ; + } + dest=argv[argc-2]; + source = 1; + break; + case 'b' : + if (source!=-1) + { + printf("ATTENTION :\nOn ne peut utiliser le service de Boite aux lettres et l'usage classique de TCP|UDP en même temps.\nVeuillez retirer une des options -b ou -s|-p\n\n"); + exit(1); + } + bal=1; + break; + case 'e' : + if (source!=-1) + { + printf("ATTENTION :\nOn ne peut utiliser le service de Boite aux lettres et l'usage classique de TCP|UDP en même temps.\nVeuillez retirer une des options -e ou -s|-p\n\n"); + exit(1); + } + 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; + nBAL = atoi(optarg); + 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; + nBAL = atoi(optarg); + break; + case 'n': + nb_message = atoi(optarg); + if (nb_message>100000) + { + printf("Trop d'envois, n> 100 000\n"); + exit (1); + } + if (recep==1) + { + printf("ATTENTION :\nVous devez récupérer l'intégralité du contenu de la BAL. Vous ne pouvez donc pas fixer n\n\n"); + exit(1); + } + break; + case 'u': + tcp=0; + if (bal!=-1) + { + printf("ATTENTION : \nL'envoi sur BAL ne se fait que via TCP, Veuillez enlever l'option -u\n\n"); + exit(1); + } + break; + case 'l': + lg = atoi(optarg); + if (lg>maxsize) + { + printf("Taille des messages supérieure à la limite fixée à %d\n",maxsize); + } + if (recep==1) + { + printf("ATTENTION :\nVous devez récupérer l'intégralité du contenu de la BAL. Vous ne pouvez donc pas fixer l\n\n"); + exit(1); + } + break; + default: + printf("usage: ./tsock [-p|-s] ou [-b|-e|-r] [-n ##]\n"); + exit(1); + break; + } + } + + + if ((port=atoi(argv[argc-1]))!=-1) + { + port=htons(port); + } + + dest=argv[argc-2]; + + if (source == -1 & bal ==-1) + { + printf("usage: ./tsock [-p|-s] ou [-b|-e|-r] + [-n ##]\n"); + exit(1) ; + } + +//Service Partie 1 Sans BAL + 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) //Attribution du nombre de message à envoyer/recevoir si absence de -n XX + { + 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 + + 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); + + //Envoi de message en TCP + else if (source==0 & tcp==1) + ServeurTCP(port, nb_message, lg); + + else if (source==1 & tcp==1) + ClientTCP(port,nb_message,lg,dest); + } + else //Partie 2 : UDP,TCP+BAL + { + if (nb_message == -1) //Attribution du nombre de message à envoyer/recevoir si absence de -n XX + { + if (recep == 0) + nb_message = 10; + + } + if (bal==1 &recep==-1) + { + printf("____________________________________________________________________\n\n"); + printf(" SERVEUR BAL \n"); + printf("____________________________________________________________________\n\n"); + SBAL(port, dest); + } + + else if (bal==1 & recep ==0) + { + printf("____________________________________________________________________\n\n"); + printf(" EMETTEUR BAL \n"); + printf("____________________________________________________________________\n\n"); + EBAL(port, dest,nb_message,lg, nBAL); + } + + else if(bal==1 &recep == 1) + { + printf("____________________________________________________________________\n\n"); + printf(" RECEPTEUR BAL \n"); + printf("____________________________________________________________________\n\n"); + RBAL(port,dest,nBAL); + } + } + + exit(0); +} + +