From e7eb70a1342df26588b8800db7340e186d7fd5f7 Mon Sep 17 00:00:00 2001 From: Yohan Boujon Date: Wed, 18 Jan 2023 09:32:22 +0100 Subject: [PATCH 1/2] =?UTF-8?q?ajout=20de=20fonction=20modeBoiteAuxLettres?= =?UTF-8?q?()=20qui=20permet=20de=20lancer=20un=20mode=20TCP=20qui=20atten?= =?UTF-8?q?d=20=C3=A0=20l'infini.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- header/puit.h | 1 + src/puit.c | 28 +++++++++++++++++++++++++++- 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/header/puit.h b/header/puit.h index 7cfd3ed..f6e1032 100644 --- a/header/puit.h +++ b/header/puit.h @@ -6,5 +6,6 @@ int launchPuit(int nombreMessage,int tailleMessage,int isTCP,int port,char * ipAddress,int isBAL); int initSocket(int socketType, struct sockaddr_in * socketStruct, int port, char * ipAddress); int receiveMultipleData(int nombreMessages, int tailleMessage, int sock, struct sockaddr_in socketStruct, int isTCP); +int modeBoiteAuxLettres(struct sockaddr_in socketStruct, int socketType, int port, char * ipAddress); #endif \ No newline at end of file diff --git a/src/puit.c b/src/puit.c index 8614c98..934498d 100644 --- a/src/puit.c +++ b/src/puit.c @@ -5,12 +5,13 @@ int launchPuit(int nombreMessage,int tailleMessage,int isTCP,int port,char * ipA int sock,socketType; struct sockaddr_in socketPuit; socketType = (isTCP) ? SOCK_STREAM : SOCK_DGRAM; - sock = initSocket(socketType,&socketPuit,port,ipAddress); if(isBAL) { printf("Mode Boîte aux Lettres\n"); + modeBoiteAuxLettres(socketPuit,socketType,port,ipAddress); return 0; } + sock = initSocket(socketType,&socketPuit,port,ipAddress); receiveMultipleData(nombreMessage,tailleMessage,sock,socketPuit,isTCP); close(sock); return 0; @@ -33,6 +34,31 @@ int initSocket(int socketType, struct sockaddr_in * socketStruct, int port, char return sockReturn; } +int modeBoiteAuxLettres(struct sockaddr_in socketStruct, int socketType, int port, char * ipAddress) +{ + char messageRecu[30+1]; + int n, i=1, longueurRecu = sizeof(socketStruct),sock,oldSock; + while(1) + { + n=1; + oldSock = initSocket(socketType,&socketStruct,port,ipAddress); + listen(oldSock,5); + sock = accept(oldSock,(struct sockaddr *)&socketStruct,(socklen_t * restrict)&longueurRecu); + while(n>0) + { + n = read(sock,messageRecu,30); + messageRecu[n] = '\0'; + if(n>0) + { + printf("Puit\tReception n°%d (%d) :\t[%s]\n",i,n,messageRecu); + i++; + } + } + close(sock); + close(oldSock); + } +} + int receiveMultipleData(int nombreMessages, int tailleMessage, int sock, struct sockaddr_in socketStruct, int isTCP) { char messageRecu[tailleMessage+1]; From 1aff7d3ee6374d8e1665b32dc8c3811c25bc648a Mon Sep 17 00:00:00 2001 From: Yohan Boujon Date: Wed, 18 Jan 2023 10:27:17 +0100 Subject: [PATCH 2/2] mode emetteur fonctionnel. --- header/source.h | 5 +++- src/main.c | 2 +- src/source.c | 69 +++++++++++++++++++++++++++++++++++++------------ 3 files changed, 57 insertions(+), 19 deletions(-) diff --git a/header/source.h b/header/source.h index 18b2b47..d74f1a8 100644 --- a/header/source.h +++ b/header/source.h @@ -2,7 +2,10 @@ #define HEADER_SOURCE #include "tsock.h" -int launchSource(int nombreMessage,int tailleMessage,int isTCP,int port,char * ipAddress); +int launchSource(int nombreMessage,int tailleMessage,int isTCP,int port,char * ipAddress,int emetteur,int recepteur); int sendMultipleData(int nombreMessages, int tailleMessage, int sock, struct sockaddr_in * socketStruct, int sizeSocketStruct, int isTCP); +void connectTCP(int sock, struct sockaddr_in socketStruct, int tailleSocket); +void modeEmetteur(int emetteur,int nombreMessage,int tailleMessage,int sock,struct sockaddr_in * socketStruct,int tailleSocketStruct); +void printAndVerif(char * sendingMessage,int tailleMessage,int longueurEmis, int count); #endif \ No newline at end of file diff --git a/src/main.c b/src/main.c index 3644ef5..e712251 100644 --- a/src/main.c +++ b/src/main.c @@ -94,7 +94,7 @@ int main (int argc, char **argv) if(source) { //printf("Source : %d\n",nb_message); - launchSource(nb_message,tailleMessage,tcp,port,ipAddress); + launchSource(nb_message,tailleMessage,tcp,port,ipAddress,emetteur,recepteur); } else { diff --git a/src/source.c b/src/source.c index d1774d8..e0723f0 100644 --- a/src/source.c +++ b/src/source.c @@ -1,6 +1,6 @@ #include "../header/source.h" -int launchSource(int nombreMessage,int tailleMessage,int isTCP,int port,char * ipAddress) +int launchSource(int nombreMessage,int tailleMessage,int isTCP,int port,char * ipAddress,int emetteur,int recepteur) { struct sockaddr_in socketSource; int sock,socketType; @@ -12,14 +12,21 @@ int launchSource(int nombreMessage,int tailleMessage,int isTCP,int port,char * i exit(EXIT_FAILURE); } initStructSocket(&socketSource,1,port,ipAddress); + if(recepteur != -1) + { + printf("Mode Recepteur, recois : %d\n",recepteur); + return 0; + } + if(emetteur != -1) + { + printf("Mode Emetteur, envois : %d\n",emetteur); + connectTCP(sock,socketSource,sizeof(socketSource)); + modeEmetteur(emetteur,nombreMessage,tailleMessage,sock,&socketSource,sizeof(socketSource)); + return 0; + } if(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); - }; + connectTCP(sock,socketSource,sizeof(socketSource)); sendMultipleData(nombreMessage,tailleMessage,sock,&socketSource,sizeof(socketSource),isTCP); } else @@ -30,11 +37,19 @@ int launchSource(int nombreMessage,int tailleMessage,int isTCP,int port,char * i return 0; } +void connectTCP(int sock, struct sockaddr_in socketStruct, int tailleSocket) +{ + if(connect(sock,(struct sockaddr *)&socketStruct,(socklen_t)tailleSocket) == -1) + { + perror("[tsock] : fonction connect() : echec connexion\n"); + exit(EXIT_FAILURE); + }; +} + int sendMultipleData(int nombreMessages, int tailleMessage, int sock, struct sockaddr_in * socketStruct, int sizeSocketStruct, int isTCP) { int longueurEmis; - char messageChar='a'; - char sendingMessage[tailleMessage]; + char sendingMessage[tailleMessage],messageChar='a'; for(int i=0;i='z'?messageChar='a':messageChar++; } return 0; +} + +void modeEmetteur(int emetteur,int nombreMessage,int tailleMessage,int sock,struct sockaddr_in * socketStruct,int tailleSocketStruct) +{ + int longueurEmis; + char sendingMessage[tailleMessage],*paramMessage,*actualMessage,messageChar='a'; + for(int i=0;i