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]);