From 91172e16099e2760438d257be21792c9c9f83f25 Mon Sep 17 00:00:00 2001 From: yoboujon Date: Sun, 15 Jan 2023 16:38:15 +0100 Subject: [PATCH 1/3] =?UTF-8?q?Gestion=20du=20port=20de=20l'IP=20demand?= =?UTF-8?q?=C3=A9s.=20Fonctionne=20hors=20localhost.=20Am=C3=A9lioration?= =?UTF-8?q?=20des=20donn=C3=A9es=20affich=C3=A9es=20=C3=A0=20l'init?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- header/puit.h | 2 +- header/source.h | 4 ++-- header/tsock.h | 9 ++++----- src/main.c | 27 +++++++++++++++++---------- src/puit.c | 4 ++-- src/source.c | 29 ++++++++++++++++++++--------- src/tsock.c | 24 +++++++++++++----------- 7 files changed, 59 insertions(+), 40 deletions(-) diff --git a/header/puit.h b/header/puit.h index f6c9749..3b45da5 100644 --- a/header/puit.h +++ b/header/puit.h @@ -2,6 +2,6 @@ #define HEADER_PUIT #include "tsock.h" -int launchPuit(int nombreMessage,int tailleMessage,int isTCP); +int launchPuit(int nombreMessage,int tailleMessage,int isTCP,int port,char * ipAddress); int receiveMultipleData(int nombreMessages, int tailleMessage, int sock, struct sockaddr_in socketStruct, int isTCP); #endif \ No newline at end of file diff --git a/header/source.h b/header/source.h index 2b6fab6..18b2b47 100644 --- a/header/source.h +++ b/header/source.h @@ -2,7 +2,7 @@ #define HEADER_SOURCE #include "tsock.h" -int launchSource(int nombreMessage,int tailleMessage,int isTCP); -int sendMultipleData(int nombreMessages, int tailleMessage, int sock, struct sockaddr_in socketStruct, int isTCP); +int launchSource(int nombreMessage,int tailleMessage,int isTCP,int port,char * ipAddress); +int sendMultipleData(int nombreMessages, int tailleMessage, int sock, struct sockaddr_in * socketStruct, int sizeSocketStruct, int isTCP); #endif \ No newline at end of file diff --git a/header/tsock.h b/header/tsock.h index 609cd3e..e67c1a2 100644 --- a/header/tsock.h +++ b/header/tsock.h @@ -11,14 +11,13 @@ #include #include #include +#include void setNbMessage(int * nb, int source); -void printInfo(int nb, int source, int portNumber, char ipAddress[]); -void initStructSocket(struct sockaddr_in *socketServerTemp, int source); -void getNonOtpArgs(char ** argv, int argc, int portNumber, char * ipAddress[]); +void printInfo(int source, int isTCP, int nbMessage, int taille, int portNumber, char ipAddress[]); +void initStructSocket(struct sockaddr_in *socketTempStruct, int source, int port, char * ipAddress); +void getNonOtpArgs(char ** argv, int argc, int * portNumber, char * ipAddress[]); void formatText(char * actualMessage, int num, int tailleMessage, char messageChar); int exitMax(int var,int tailleMax); -#define PORT_NUM 9000 - #endif \ No newline at end of file diff --git a/src/main.c b/src/main.c index 6e5186d..34d8175 100644 --- a/src/main.c +++ b/src/main.c @@ -8,19 +8,19 @@ int main (int argc, char **argv) char *ipAddress; extern char *optarg; extern int optind; - int source = -1, nb_message = -1, c, tcp=1, port=9000, tailleMessage=-1; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */ + int source = -1, nb_message = -1, c, tcp=1, port=-1, tailleMessage=30; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */ while ((c = getopt(argc, argv, "pn:sul:")) != -1) { switch (c) { case 'p': if (source != -1) { - printf(usageChar); + printf("%s",usageChar); exit(1); } source = 0; break; case 's': if (source != -1) { - printf(usageChar); + printf("%s",usageChar); exit(1) ; } source = 1; @@ -36,32 +36,39 @@ int main (int argc, char **argv) tcp=0; break; default: - printf(usageChar); + printf("%s",usageChar); break; } } if (source == -1) { printf("-p|-s non present !\n"); - printf(usageChar); + printf("%s",usageChar); exit(1); } + if(argc != optind+2) + { + printf("ip ou port non present !\n"); + printf("%s",usageChar); + exit(1); + } + if(tailleMessage == -1) { tailleMessage = 30; } - - getNonOtpArgs(argv, argc, port, &ipAddress); + getNonOtpArgs(argv, argc, &port, &ipAddress); setNbMessage(&nb_message,source); - printInfo(nb_message,source,port,ipAddress); + printInfo(source,tcp,nb_message,tailleMessage,port,ipAddress); if(source) { //printf("Source : %d\n",nb_message); - launchSource(nb_message,tailleMessage,tcp); + launchSource(nb_message,tailleMessage,tcp,port,ipAddress); } else { //printf("Puit : %d\n",nb_message); - launchPuit(nb_message,tailleMessage,tcp); + launchPuit(nb_message,tailleMessage,tcp,port,ipAddress); } + return(EXIT_SUCCESS); } \ No newline at end of file diff --git a/src/puit.c b/src/puit.c index c631d0d..76e18fa 100644 --- a/src/puit.c +++ b/src/puit.c @@ -1,6 +1,6 @@ #include "../header/puit.h" -int launchPuit(int nombreMessage,int tailleMessage,int isTCP) +int launchPuit(int nombreMessage,int tailleMessage,int isTCP,int port,char * ipAddress) { int sock,socketType; struct sockaddr_in socketPuit; @@ -11,7 +11,7 @@ int launchPuit(int nombreMessage,int tailleMessage,int isTCP) perror("[tsock] : fonction socket() : echec creation du socket\n"); exit(EXIT_FAILURE); } - initStructSocket(&socketPuit,0); + initStructSocket(&socketPuit,0,port,ipAddress); if (bind(sock, (struct sockaddr *)&socketPuit, sizeof(socketPuit)) < 0 ) { perror("[tsock] : fonction bind() : echec du lien avec socket serveur.\n"); diff --git a/src/source.c b/src/source.c index d1dc4d6..d1774d8 100644 --- a/src/source.c +++ b/src/source.c @@ -1,9 +1,9 @@ #include "../header/source.h" -int launchSource(int nombreMessage,int tailleMessage,int isTCP) +int launchSource(int nombreMessage,int tailleMessage,int isTCP,int port,char * ipAddress) { - int sock,socketType; struct sockaddr_in socketSource; + int sock,socketType; socketType = (isTCP) ? SOCK_STREAM : SOCK_DGRAM; if((sock=socket(AF_INET,socketType,0)) == -1) @@ -11,21 +11,26 @@ int launchSource(int nombreMessage,int tailleMessage,int isTCP) perror("[tsock] : fonction socket() : echec creation du socket\n"); exit(EXIT_FAILURE); } - initStructSocket(&socketSource,1); + initStructSocket(&socketSource,1,port,ipAddress); if(isTCP) { - connect(sock,(struct sockaddr *)&socketSource,(socklen_t)sizeof(socketSource)); - sendMultipleData(nombreMessage,tailleMessage,sock,socketSource,isTCP); + int connectStatus; + if((connectStatus = connect(sock,(struct sockaddr *)&socketSource,(socklen_t)sizeof(socketSource))) == -1) + { + perror("[tsock] : fonction connect() : echec connexion\n"); + exit(EXIT_FAILURE); + }; + sendMultipleData(nombreMessage,tailleMessage,sock,&socketSource,sizeof(socketSource),isTCP); } else { - sendMultipleData(nombreMessage,tailleMessage,sock,socketSource,isTCP); + sendMultipleData(nombreMessage,tailleMessage,sock,&socketSource,sizeof(socketSource),isTCP); } close(sock); return 0; } -int sendMultipleData(int nombreMessages, int tailleMessage, int sock, struct sockaddr_in socketStruct, int isTCP) +int sendMultipleData(int nombreMessages, int tailleMessage, int sock, struct sockaddr_in * socketStruct, int sizeSocketStruct, int isTCP) { int longueurEmis; char messageChar='a'; @@ -35,11 +40,17 @@ int sendMultipleData(int nombreMessages, int tailleMessage, int sock, struct soc formatText(sendingMessage,i,tailleMessage,messageChar); if(isTCP) { - longueurEmis = write(sock,sendingMessage,sizeof(sendingMessage)); + longueurEmis = write(sock,sendingMessage,tailleMessage); } else { - longueurEmis = sendto(sock, sendingMessage, tailleMessage, 0, (struct sockaddr*)&socketStruct, sizeof(socketStruct)); + longueurEmis = sendto(sock,sendingMessage,tailleMessage,0,(struct sockaddr*)socketStruct, sizeSocketStruct); + } + + if(longueurEmis == -1) + { + perror("[tsock] : fonction sendto()/write() : echec d'envoi\n"); + exit(EXIT_FAILURE); } sendingMessage[tailleMessage]='\0'; printf("Source\tEnvoi n°%d (%d) :\t[%s]\n",i+1,longueurEmis,sendingMessage); diff --git a/src/tsock.c b/src/tsock.c index 6e2225b..576e8e5 100644 --- a/src/tsock.c +++ b/src/tsock.c @@ -8,32 +8,34 @@ void setNbMessage(int * nb, int source) } } -void printInfo(int nb, int source, int portNumber, char ipAddress[]) +void printInfo(int source, int isTCP, int nbMessage, int taille, int portNumber, char ipAddress[]) { if(source) { - printf("tsock lance en mode source, nombre de tampons à envoyer : %d\nPort : %d\t Adresse IP : %s\n", nb, portNumber, ipAddress); + printf("tsock lance en mode source, nombre de messages à envoyer : %d\nTaille des messages : %d\nPort : %d\t Adresse IP : %s\n",nbMessage,taille,portNumber,ipAddress); + isTCP==1 ? printf("Mode de transmission : TCP\n") : printf("Mode de transmission : UDP\n"); } else { - printf("tsock lance en mode puit, nombre de tampons à recevoir :"); - nb != -1 ? printf("%d\n", nb) : printf("infini\n"); - printf("Port : %d\n",portNumber); + printf("tsock lance en mode puit, nombre de messages à recevoir :"); + nbMessage != -1 ? printf("%d\n", nbMessage) : printf("infini\n"); + printf("Taille des messages : %d\nPort : %d\t Adresse IP : %s\n",taille,portNumber,ipAddress); + isTCP==1 ? printf("Mode de transmission : TCP\n") : printf("Mode de transmission : UDP\n"); } } -void initStructSocket(struct sockaddr_in *socketTempStruct, int source) +void initStructSocket(struct sockaddr_in *socketTempStruct, int source, int port, char * ipAddress) { memset(socketTempStruct, 0, sizeof(*socketTempStruct)); socketTempStruct->sin_family=AF_INET; - socketTempStruct->sin_port=htons(PORT_NUM); + socketTempStruct->sin_port=htons(port); if(source) { struct hostent *hp; - if((hp = gethostbyname("localhost")) == NULL) + if((hp = gethostbyname(ipAddress)) == NULL) { printf("erreur gethostbyname\n"); - exit(1); + exit(EXIT_FAILURE); } memcpy((char*)&(socketTempStruct->sin_addr.s_addr),hp->h_addr_list[0],hp->h_length); } @@ -43,9 +45,9 @@ void initStructSocket(struct sockaddr_in *socketTempStruct, int source) } } -void getNonOtpArgs(char ** argv, int argc, int portNumber, char ** ipAddress) +void getNonOtpArgs(char ** argv, int argc, int * portNumber, char ** ipAddress) { - portNumber = atoi(argv[argc-2]); + *portNumber = atoi(argv[argc-2]); *ipAddress = NULL; *ipAddress = (char *)malloc(sizeof(argv[argc-1])); strcpy(*ipAddress,argv[argc-1]); From 105907be70aca6df0b411e63175133776c374826 Mon Sep 17 00:00:00 2001 From: yoboujon Date: Sun, 15 Jan 2023 19:21:58 +0100 Subject: [PATCH 2/3] =?UTF-8?q?Introduction=20du=20module=20"Bo=C3=AEte=20?= =?UTF-8?q?aux=20lettres"=20de=20Simon?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/bal.c | 58 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) create mode 100644 src/bal.c diff --git a/src/bal.c b/src/bal.c new file mode 100644 index 0000000..e9430e2 --- /dev/null +++ b/src/bal.c @@ -0,0 +1,58 @@ +#include +#include +#include +#include + +typedef struct{ + char *data; + int tailleData; + int idEmeteur; +}messageBAL; + +struct elementMessage{ + messageBAL * messageBALActuel; + struct messageBAL * suiv; +}; + +struct listeMessage{ + struct elementMessage * debut; + struct elementMessage * courant; + struct elementMessage * fin; +}; + +messageBAL * creeMessage(char *data,int idEmeteur); +struct elementMessage * initElement(void); +struct listeMessage initListe(void); + +int main(void){ + initElement(); + return 0; +} + +messageBAL * creeMessage(char *data,int idEmeteur) +{ + messageBAL * message = malloc(sizeof(messageBAL)); + + message->idEmeteur=idEmeteur; + message->tailleData=strlen(data); + message->data=(char*)malloc(sizeof(char)*message->tailleData); + strcpy(message->data,data); + return message; +} + +struct elementMessage * initElement(void) +{ + struct elementMessage * returnElement = malloc(sizeof(struct elementMessage)); + returnElement->messageBALActuel = creeMessage("",0); + returnElement->suiv = NULL; + return returnElement; +} + +struct listeMessage initListe(void) +{ + struct listeMessage l; + l.debut=initElement(); + l.fin=initElement(); + l.courant=initElement(); + return l; +} \ No newline at end of file From 7885ac7bb6b0d90ca0a523e907486b838692ffd4 Mon Sep 17 00:00:00 2001 From: Yohan Boujon Date: Sun, 15 Jan 2023 22:37:30 +0100 Subject: [PATCH 3/3] =?UTF-8?q?Prise=20en=20charge=20compl=C3=A8te=20de=20?= =?UTF-8?q?la=20liste=20des=20messages?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- header/bal.h | 29 ++++++++++++++++++++++++ header/puit.h | 2 ++ src/bal.c | 61 +++++++++++++++++++++++++-------------------------- 3 files changed, 61 insertions(+), 31 deletions(-) create mode 100644 header/bal.h diff --git a/header/bal.h b/header/bal.h new file mode 100644 index 0000000..23bacce --- /dev/null +++ b/header/bal.h @@ -0,0 +1,29 @@ +#ifndef HEADER_BAL +#define HEADER_BAL + +#include "tsock.h" + +typedef struct{ + char *data; + int tailleData; + int idEmeteur; +}messageBAL; + +struct elementMessage{ + messageBAL * messageBALActuel; + struct elementMessage * suiv; +}; + +struct listeMessage{ + struct elementMessage * debut; + struct elementMessage * courant; + struct elementMessage * fin; +}; + +messageBAL * creeMessage(char *data,int idEmeteur); +struct elementMessage * initElementMessage(void); +struct listeMessage initListeMessage(void); +void ajoutListe(struct listeMessage * listeActuel,messageBAL * leMessage); +void afficheListeMessage(struct listeMessage listeActuel); + +#endif \ No newline at end of file diff --git a/header/puit.h b/header/puit.h index 3b45da5..e9c795a 100644 --- a/header/puit.h +++ b/header/puit.h @@ -2,6 +2,8 @@ #define HEADER_PUIT #include "tsock.h" + int launchPuit(int nombreMessage,int tailleMessage,int isTCP,int port,char * ipAddress); int receiveMultipleData(int nombreMessages, int tailleMessage, int sock, struct sockaddr_in socketStruct, int isTCP); + #endif \ No newline at end of file diff --git a/src/bal.c b/src/bal.c index e9430e2..7b8b94e 100644 --- a/src/bal.c +++ b/src/bal.c @@ -1,31 +1,10 @@ -#include -#include -#include -#include - -typedef struct{ - char *data; - int tailleData; - int idEmeteur; -}messageBAL; - -struct elementMessage{ - messageBAL * messageBALActuel; - struct messageBAL * suiv; -}; - -struct listeMessage{ - struct elementMessage * debut; - struct elementMessage * courant; - struct elementMessage * fin; -}; - -messageBAL * creeMessage(char *data,int idEmeteur); -struct elementMessage * initElement(void); -struct listeMessage initListe(void); +#include "../header/bal.h" int main(void){ - initElement(); + struct listeMessage l = initListeMessage(); + messageBAL * messageBAL = creeMessage("Renvoi moi mon pdf asap. -Simon",1); + ajoutListe(&l,messageBAL); + afficheListeMessage(l); return 0; } @@ -40,7 +19,7 @@ messageBAL * creeMessage(char *data,int idEmeteur) return message; } -struct elementMessage * initElement(void) +struct elementMessage * initElementMessage(void) { struct elementMessage * returnElement = malloc(sizeof(struct elementMessage)); returnElement->messageBALActuel = creeMessage("",0); @@ -48,11 +27,31 @@ struct elementMessage * initElement(void) return returnElement; } -struct listeMessage initListe(void) +struct listeMessage initListeMessage(void) { struct listeMessage l; - l.debut=initElement(); - l.fin=initElement(); - l.courant=initElement(); + l.debut=initElementMessage(); + l.fin=initElementMessage(); + l.courant=initElementMessage(); return l; +} + +void ajoutListe(struct listeMessage * listeActuel,messageBAL * leMessage) +{ + struct elementMessage * elementActuel = malloc(sizeof(struct elementMessage)); + elementActuel->messageBALActuel=leMessage; + elementActuel->suiv=listeActuel->courant; + listeActuel->debut=elementActuel; + listeActuel->courant=elementActuel; +} + +void afficheListeMessage(struct listeMessage listeActuel) +{ + struct elementMessage * elementFinal = listeActuel.fin; + struct elementMessage * elementCourant = listeActuel.courant; + while(elementCourant->suiv != elementFinal->suiv) + { + printf("%s\n",elementCourant->messageBALActuel->data); + elementCourant=elementCourant->suiv; + } } \ No newline at end of file