From 3caaa99da2e4e3766743e5b7f819f8fafc683e2d Mon Sep 17 00:00:00 2001 From: BQUINTAN Date: Tue, 14 Apr 2020 12:51:12 +0200 Subject: [PATCH] =?UTF-8?q?V3=20temrin=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- ProgC_Q.zip | Bin 0 -> 16239 bytes makefile | 3 + tsock.h | 421 +++++++++++++++++++++++++++++++++++++++++++++++++++ tsock_v0.c | 80 ++++++++++ tsock_v1_1.c | 157 +++++++++++++++++++ tsock_v2.c | 175 +++++++++++++++++++++ tsock_v3 | Bin 0 -> 23048 bytes tsock_v3.c | 184 ++++++++++++++++++++++ 8 files changed, 1020 insertions(+) create mode 100644 ProgC_Q.zip create mode 100644 makefile create mode 100644 tsock.h create mode 100644 tsock_v0.c create mode 100644 tsock_v1_1.c create mode 100644 tsock_v2.c create mode 100644 tsock_v3 create mode 100644 tsock_v3.c diff --git a/ProgC_Q.zip b/ProgC_Q.zip new file mode 100644 index 0000000000000000000000000000000000000000..1562e5bc1d6459f6d22f7f2a2f142f2dd8ffdf43 GIT binary patch literal 16239 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 V3ij8h1OKy8|5*p126) + { + motif=alphabet[i%26-1]; + } + 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); + } +} + +//---------------------------------------------------- +//----------------Envoi UDP--------------------------- +//---------------------------------------------------- + +void envoi_UDP(int port ,int nb_mess , int lg_msg,char*dest) + + +{ + + int length_addr_dist; + length_addr_dist=sizeof(struct sockaddr_in); + + int sock; + int sent; + struct sockaddr_in addr_distant; + struct hostent* hp; + char *message=malloc(sizeof(char)*lg_msg) ; + + if((sock=socket(AF_INET,SOCK_DGRAM,IPPROTO_UDP))==-1) //création du socket + test erreur (socket retourne -1 si le socket ne s'ouvre pas comme il faut + { + printf("Erreur à la création du socket\n"); + exit(1); + } + memset((char*)&addr_distant,0,sizeof(addr_distant)); + addr_distant.sin_family=AF_INET; + addr_distant.sin_port=port; + + if((hp=gethostbyname(dest))==NULL) + { + printf("Erreur gethostbyname\n"); + exit(1); + } + + printf("Après gethostbyname , nb_message= %d\n",nb_mess); + + memcpy((char*)&(addr_distant.sin_addr.s_addr), hp->h_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); + } + printbuffer(i); + 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); + printbuffer(i); + 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); + +// printbuffer(i); + afficher_message(message,lg_msg); + + //Envoi du message + + if ((envoi=sendto(sock,message,lg_msg,0,(struct sockaddr*)&addr_distant,lg_addr_distant))==-1) + { + printf("Echec de l'envoi du message (fonction send 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); + } +// printbuffer(i); + 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 diff --git a/tsock_v0.c b/tsock_v0.c new file mode 100644 index 0000000..168d258 --- /dev/null +++ b/tsock_v0.c @@ -0,0 +1,80 @@ +/* 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 new file mode 100644 index 0000000..8187c52 --- /dev/null +++ b/tsock_v1_1.c @@ -0,0 +1,157 @@ +//--------------------------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_v2.c b/tsock_v2.c new file mode 100644 index 0000000..e8b4e9d --- /dev/null +++ b/tsock_v2.c @@ -0,0 +1,175 @@ +//--------------------------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" +/* 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_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 à recevoir = 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,30); + } + + //PUITS de réception en UDP + + else if (source==0 & tcp==0) + { + reception_UDP(port,nb_message,30); + } + + + else if (source==0 & tcp==1) + { + printf("On utilise TCP en puits\n"); + ServeurTCP(port, nb_message, 30); + } + + else if (source==1 & tcp==1) + { + printf("On utilise TCP en source\n"); + ClientTCP(port,nb_message,30); + } + + exit(0); +} + + diff --git a/tsock_v3 b/tsock_v3 new file mode 100644 index 0000000000000000000000000000000000000000..fe680f6cdc3950711e080abc7a39676c8f1475d0 GIT binary patch literal 23048 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 +/* 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); + 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); +} + +