From d272f9c5ad62bc7ab165fcfbc092126abeb1c23d Mon Sep 17 00:00:00 2001 From: Yohan Boujon Date: Fri, 13 Jan 2023 12:35:09 +0100 Subject: [PATCH] ajout de TCP --- header/puit.h | 2 +- header/source.h | 2 +- src/main.c | 4 ++-- src/puit.c | 30 ++++++++++++++++++++++++++---- src/source.c | 29 ++++++++++++++++++++++++----- 5 files changed, 54 insertions(+), 13 deletions(-) diff --git a/header/puit.h b/header/puit.h index 78f7ad0..d7b13fd 100644 --- a/header/puit.h +++ b/header/puit.h @@ -2,7 +2,7 @@ #define HEADER_PUIT #include "tsock.h" -int launchPuit(int nombreMessage,int TailleMessage,int isTCP); +int launchPuit(int nombreMessage,int tailleMessage,int isTCP); int receiveMultipleData(int nombreMessages, int tailleMessage, int sock, struct sockaddr_in socketStruct); int exitMax(int var,int tailleMax); #endif \ No newline at end of file diff --git a/header/source.h b/header/source.h index 5c544a4..f04058d 100644 --- a/header/source.h +++ b/header/source.h @@ -2,7 +2,7 @@ #define HEADER_SOURCE #include "tsock.h" -int launchSource(int nombreMessage, int isTCP); +int launchSource(int nombreMessage,int tailleMessage,int isTCP); int sendMultipleData(int nombreMessages, int tailleMessage, int sock, struct sockaddr_in socketStruct); #endif \ No newline at end of file diff --git a/src/main.c b/src/main.c index 73194be..51c92aa 100644 --- a/src/main.c +++ b/src/main.c @@ -9,7 +9,7 @@ int main (int argc, char **argv) extern char *optarg; extern int optind; int source = -1, nb_message = -1, c, tcp=1, port=9000, tailleMessage; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */ - while ((c = getopt(argc, argv, "pn:su")) != -1) { + while ((c = getopt(argc, argv, "pn:sul:")) != -1) { switch (c) { case 'p': if (source != -1) { @@ -53,7 +53,7 @@ int main (int argc, char **argv) if(source) { //printf("Source : %d\n",nb_message); - launchSource(nb_message,tcp); + launchSource(nb_message,tailleMessage,tcp); } else { diff --git a/src/puit.c b/src/puit.c index cf5afbe..69e3e0e 100644 --- a/src/puit.c +++ b/src/puit.c @@ -2,21 +2,43 @@ int launchPuit(int nombreMessage,int tailleMessage,int isTCP) { - int sock; + int sock,socketType; struct sockaddr_in socketPuit; + if(isTCP) + { + socketType=SOCK_STREAM; + } + else + { + socketType=SOCK_DGRAM; + } - if((sock=socket(AF_INET,SOCK_DGRAM,0)) == -1) + if((sock=socket(AF_INET,socketType,0)) == -1) { perror("[tsock] : fonction socket() : echec creation du socket\n"); exit(EXIT_FAILURE); } initStructSocket(&socketPuit,0); - if (bind(sock, (const struct sockaddr *)&socketPuit, sizeof(socketPuit)) < 0 ) + if (bind(sock, (struct sockaddr *)&socketPuit, sizeof(socketPuit)) < 0 ) { perror("[tsock] : fonction bind() : echec du lien avec socket serveur.\n"); exit(EXIT_FAILURE); } - receiveMultipleData(nombreMessage,tailleMessage,sock,socketPuit); + if(isTCP) + { + unsigned int longueurRecu = sizeof(socketPuit); + char messageRecu[30]; + listen(sock,10); + int acceptValue = accept(sock,(struct sockaddr *)&socketPuit,&longueurRecu); + printf("AcceptValue = %d\n",acceptValue); + int tailleMessageRecu = read(acceptValue,messageRecu,sizeof(messageRecu)); + messageRecu[tailleMessageRecu]='\0'; + printf("Message TCP [%d] : %s\n",tailleMessageRecu,messageRecu); + } + else + { + receiveMultipleData(nombreMessage,tailleMessage,sock,socketPuit); + } close(sock); return 0; } diff --git a/src/source.c b/src/source.c index 59d29c3..643c335 100644 --- a/src/source.c +++ b/src/source.c @@ -1,17 +1,35 @@ #include "../header/source.h" -int launchSource(int nombreMessage, int isTCP) +int launchSource(int nombreMessage,int tailleMessage,int isTCP) { - int sock; + int sock,socketType; struct sockaddr_in socketSource; + if(isTCP) + { + socketType=SOCK_STREAM; + } + else + { + socketType=SOCK_DGRAM; + } - if((sock=socket(AF_INET,SOCK_DGRAM,0)) == -1) + if((sock=socket(AF_INET,socketType,0)) == -1) { perror("[tsock] : fonction socket() : echec creation du socket\n"); exit(EXIT_FAILURE); } initStructSocket(&socketSource,1); - sendMultipleData(nombreMessage,30,sock,socketSource); + if(isTCP) + { + connect(sock,(struct sockaddr *)&socketSource,(socklen_t)sizeof(socketSource)); + printf("Connect successful\n"); + int isWritten = write(sock,"aaaaaa",sizeof("aaaaaa")); + printf("on écrit : %d\n",isWritten); + } + else + { + sendMultipleData(nombreMessage,tailleMessage,sock,socketSource); + } close(sock); return 0; } @@ -23,8 +41,9 @@ int sendMultipleData(int nombreMessages, int tailleMessage, int sock, struct soc char sendingMessage[tailleMessage]; for(int i=0;i