chore: remove tabs, indent all c files

This commit is contained in:
Paul Alnet 2024-03-07 09:53:44 +01:00
parent 76d6a2b6a1
commit 3ad285eeca
4 changed files with 745 additions and 745 deletions

View file

@ -11,7 +11,7 @@
/* constantes et structures propres au domaine INTERNET */ /* constantes et structures propres au domaine INTERNET */
#include <netinet/in.h> #include <netinet/in.h>
/* structures retournées par les fonctions de gestion de la base de /* structures retournées par les fonctions de gestion de la base de
données du réseau */ données du réseau */
#include <netdb.h> #include <netdb.h>
/* pour les entrées/sorties */ /* pour les entrées/sorties */
#include <stdio.h> #include <stdio.h>
@ -20,61 +20,61 @@ données du réseau */
void main (int argc, char **argv) void main (int argc, char **argv)
{ {
int c; int c;
extern char *optarg; extern char *optarg;
extern int optind; extern int optind;
int nb_message = -1; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */ 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 source = -1 ; /* 0=puits, 1=source */
while ((c = getopt(argc, argv, "pn:s")) != -1) { while ((c = getopt(argc, argv, "pn:s")) != -1) {
switch (c) { switch (c) {
case 'p': case 'p':
if (source == 1) { if (source == 1) {
printf("usage: cmd [-p|-s][-n ##]\n"); printf("usage: cmd [-p|-s][-n ##]\n");
exit(1); exit(1);
} }
source = 0; source = 0;
break; break;
case 's': case 's':
if (source == 0) { if (source == 0) {
printf("usage: cmd [-p|-s][-n ##]\n"); printf("usage: cmd [-p|-s][-n ##]\n");
exit(1) ; exit(1) ;
} }
source = 1; source = 1;
break; break;
case 'n': case 'n':
nb_message = atoi(optarg); nb_message = atoi(optarg);
break; break;
default: default:
printf("usage: cmd [-p|-s][-n ##]\n"); printf("usage: cmd [-p|-s][-n ##]\n");
break; break;
} }
} }
if (source == -1) { if (source == -1) {
printf("usage: cmd [-p|-s][-n ##]\n"); printf("usage: cmd [-p|-s][-n ##]\n");
exit(1) ; exit(1) ;
} }
if (source == 1) if (source == 1)
printf("on est dans le source\n"); printf("on est dans le source\n");
else else
printf("on est dans le puits\n"); printf("on est dans le puits\n");
if (nb_message != -1) { if (nb_message != -1) {
if (source == 1) if (source == 1)
printf("nb de tampons à envoyer : %d\n", nb_message); printf("nb de tampons à envoyer : %d\n", nb_message);
else else
printf("nb de tampons à recevoir : %d\n", nb_message); printf("nb de tampons à recevoir : %d\n", nb_message);
} else { } else {
if (source == 1) { if (source == 1) {
nb_message = 10 ; nb_message = 10 ;
printf("nb de tampons à envoyer = 10 par défaut\n"); printf("nb de tampons à envoyer = 10 par défaut\n");
} else } else
printf("nb de tampons à envoyer = infini\n"); printf("nb de tampons à envoyer = infini\n");
} }
} }

View file

@ -11,7 +11,7 @@
/* constantes et structures propres au domaine INTERNET */ /* constantes et structures propres au domaine INTERNET */
#include <netinet/in.h> #include <netinet/in.h>
/* structures retournées par les fonctions de gestion de la base de /* structures retournées par les fonctions de gestion de la base de
données du réseau */ données du réseau */
#include <netdb.h> #include <netdb.h>
/* pour les entrées/sorties */ /* pour les entrées/sorties */
#include <stdio.h> #include <stdio.h>
@ -28,167 +28,167 @@ void afficher_message(char *message, int lg) {
int i; int i;
printf("message reçu : "); printf("message reçu : ");
for (i=0;i<lg;i++){ for (i=0;i<lg;i++){
printf("%c", message[i]); printf("%c", message[i]);
} }
printf("\n"); printf("\n");
} }
int main (int argc, char **argv) int main (int argc, char **argv)
{ {
int c; int c;
extern char *optarg; extern char *optarg;
extern int optind; extern int optind;
int nb_message = -1; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */ 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 source = -1 ; /* 0=puits, 1=source */
int udp=0; /* 0=TCP, 1=UDP */ int udp=0; /* 0=TCP, 1=UDP */
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': while ((c = getopt(argc, argv, "pn:su")) != -1) {
if (source == 0) { switch (c) {
printf("usage: cmd [-p|-s][-n ##]\n"); case 'p':
exit(1) ; if (source == 1) {
} printf("usage: cmd [-p|-s][-n ##]\n");
source = 1; exit(1);
break;
case 'n':
nb_message = atoi(optarg);
break;
case 'u':
udp=1;
break;
default:
printf("usage: cmd [-p|-s][-n ##]\n");
break;
}
}
char* nom_machine_distante;
// Recuperation du port
int port=atoi(argv[argc-1]);
port = htons(port);
char* message = malloc(BASE_SIZE * sizeof(char));
if (source == -1) {
printf("usage: cmd [-p|-s][-n ##]\n");
exit(1) ;
}
if (source == 1) {
printf("on est dans le source\n");
//Recuperation du nom logique
nom_machine_distante=argv[argc-2];
}
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");
}
if (udp==1){
// Creation du socket local
int sock= socket(AF_INET,SOCK_DGRAM,0);
if (source==1) {
// Creation de l'adresse du socket distant
struct hostent *hp ;
struct sockaddr_in adr_dest;
int longueur_adr_dest = sizeof(adr_dest);
int longueur_message = BASE_SIZE;
memset((char *)& adr_dest, 0, sizeof(adr_dest)) ;
adr_dest.sin_family=AF_INET;
adr_dest.sin_port=port;
if ((hp = gethostbyname(nom_machine_distante)) == NULL) {
printf("erreur gethostbyname\n") ;
exit(1) ;
}
memcpy( (char*)&(adr_dest.sin_addr.s_addr),
hp->h_addr,
hp->h_length ) ;
for (int i = 0; i < nb_message; i++) {
// Construction du message
construire_message(message, 'a' + (i % 26), BASE_SIZE);
// Envoi du message
sendto(sock,message,longueur_message,0,(struct sockaddr*)&adr_dest,longueur_adr_dest);
}
exit(0);
}
else {
// Creation de l'adresse du socket distant
struct sockaddr_in adr_locale;
int longueur_adr_locale = sizeof(adr_locale);
int longueur_message = BASE_SIZE;
memset((char *)& adr_locale, 0, sizeof(adr_locale)) ;
adr_locale.sin_family=AF_INET;
adr_locale.sin_port=port;
adr_locale.sin_addr.s_addr = INADDR_ANY;
// Bind the local socket to any local address (ie any available interface)
if (bind(sock, (struct sockaddr *) &adr_locale, longueur_adr_locale) == -1) {
printf("failed to bind\n");
exit(1);
}
while (1) {
// Receive a single message because we are lazy
recvfrom(sock, message, longueur_message, 0, NULL, NULL);
// Afficher notre seule et unique triste message
afficher_message(message, longueur_message);
}
exit(0);
}
} }
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;
case 'u':
udp=1;
break;
default:
printf("usage: cmd [-p|-s][-n ##]\n");
break;
}
}
char* nom_machine_distante;
// Recuperation du port
int port=atoi(argv[argc-1]);
port = htons(port);
char* message = malloc(BASE_SIZE * sizeof(char));
if (source == -1) {
printf("usage: cmd [-p|-s][-n ##]\n");
exit(1) ;
}
if (source == 1) {
printf("on est dans le source\n");
//Recuperation du nom logique
nom_machine_distante=argv[argc-2];
}
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");
}
if (udp==1){
// Creation du socket local
int sock= socket(AF_INET,SOCK_DGRAM,0);
if (source==1) {
// Creation de l'adresse du socket distant
struct hostent *hp ;
struct sockaddr_in adr_dest;
int longueur_adr_dest = sizeof(adr_dest);
int longueur_message = BASE_SIZE;
memset((char *)& adr_dest, 0, sizeof(adr_dest)) ;
adr_dest.sin_family=AF_INET;
adr_dest.sin_port=port;
if ((hp = gethostbyname(nom_machine_distante)) == NULL) {
printf("erreur gethostbyname\n") ;
exit(1) ;
}
memcpy( (char*)&(adr_dest.sin_addr.s_addr),
hp->h_addr,
hp->h_length ) ;
for (int i = 0; i < nb_message; i++) {
// Construction du message
construire_message(message, 'a' + (i % 26), BASE_SIZE);
// Envoi du message
sendto(sock,message,longueur_message,0,(struct sockaddr*)&adr_dest,longueur_adr_dest);
}
exit(0);
}
else {
// Creation de l'adresse du socket distant
struct sockaddr_in adr_locale;
int longueur_adr_locale = sizeof(adr_locale);
int longueur_message = BASE_SIZE;
memset((char *)& adr_locale, 0, sizeof(adr_locale)) ;
adr_locale.sin_family=AF_INET;
adr_locale.sin_port=port;
adr_locale.sin_addr.s_addr = INADDR_ANY;
// Bind the local socket to any local address (ie any available interface)
if (bind(sock, (struct sockaddr *) &adr_locale, longueur_adr_locale) == -1) {
printf("failed to bind\n");
exit(1);
}
while (1) {
// Receive a single message because we are lazy
recvfrom(sock, message, longueur_message, 0, NULL, NULL);
// Afficher notre seule et unique triste message
afficher_message(message, longueur_message);
}
exit(0);
}
}
} }

View file

@ -11,7 +11,7 @@
/* constantes et structures propres au domaine INTERNET */ /* constantes et structures propres au domaine INTERNET */
#include <netinet/in.h> #include <netinet/in.h>
/* structures retournées par les fonctions de gestion de la base de /* structures retournées par les fonctions de gestion de la base de
données du réseau */ données du réseau */
#include <netdb.h> #include <netdb.h>
/* pour les entrées/sorties */ /* pour les entrées/sorties */
#include <stdio.h> #include <stdio.h>
@ -28,263 +28,263 @@ void afficher_message(char *message, int lg) {
int i; int i;
printf("message reçu : "); printf("message reçu : ");
for (i=0;i<lg;i++){ for (i=0;i<lg;i++){
printf("%c", message[i]); printf("%c", message[i]);
} }
printf("\n"); printf("\n");
} }
int main (int argc, char **argv) int main (int argc, char **argv)
{ {
int c; int c;
extern char *optarg; extern char *optarg;
extern int optind; extern int optind;
int nb_message = -1; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */ 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 source = -1 ; /* 0=puits, 1=source */
int udp=0; /* 0=TCP, 1=UDP */ int udp=0; /* 0=TCP, 1=UDP */
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': while ((c = getopt(argc, argv, "pn:su")) != -1) {
if (source == 0) { switch (c) {
printf("usage: cmd [-p|-s][-n ##]\n"); case 'p':
exit(1) ; if (source == 1) {
} printf("usage: cmd [-p|-s][-n ##]\n");
source = 1; exit(1);
break;
case 'n':
nb_message = atoi(optarg);
break;
case 'u':
udp=1;
break;
default:
printf("usage: cmd [-p|-s][-n ##]\n");
break;
}
}
char* nom_machine_distante;
// Recuperation du port
int port=atoi(argv[argc-1]);
port = htons(port);
char* message = malloc(BASE_SIZE * sizeof(char));
if (source == -1) {
printf("usage: cmd [-p|-s][-n ##]\n");
exit(1) ;
}
if (source == 1) {
//Recuperation du nom logique
nom_machine_distante=argv[argc-2];
} else printf("PUITS:");
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");
}
if (udp==1){
// Creation du socket local
int sock= socket(AF_INET,SOCK_DGRAM,0);
if (source==1) {
// Creation de l'adresse du socket distant
struct hostent *hp ;
struct sockaddr_in adr_dest;
int longueur_adr_dest = sizeof(adr_dest);
int longueur_message = BASE_SIZE;
memset((char *)& adr_dest, 0, sizeof(adr_dest)) ;
adr_dest.sin_family=AF_INET;
adr_dest.sin_port=port;
if ((hp = gethostbyname(nom_machine_distante)) == NULL) {
printf("erreur gethostbyname\n") ;
exit(1) ;
}
memcpy( (char*)&(adr_dest.sin_addr.s_addr),
hp->h_addr,
hp->h_length ) ;
for (int i = 0; i < nb_message; i++) {
// Construction du message
construire_message(message, 'a' + (i % 26), BASE_SIZE);
// Envoi du message
sendto(sock,message,longueur_message,0,(struct sockaddr*)&adr_dest,longueur_adr_dest);
}
}
else {
// Creation de l'adresse du socket distant
struct sockaddr_in adr_locale;
int longueur_adr_locale = sizeof(adr_locale);
int longueur_message = BASE_SIZE;
memset((char *)& adr_locale, 0, sizeof(adr_locale)) ;
adr_locale.sin_family=AF_INET;
adr_locale.sin_port=port;
adr_locale.sin_addr.s_addr = INADDR_ANY;
// Bind the local socket to any local address (ie any available interface)
if (bind(sock, (struct sockaddr *) &adr_locale, longueur_adr_locale) == -1) {
printf("failed to bind\n");
exit(1);
}
while (1) {
// Receive a single message because we are lazy
recvfrom(sock, message, longueur_message, 0, NULL, NULL);
// Afficher notre seule et unique triste message
afficher_message(message, longueur_message);
}
}
} }
source = 0;
break;
else{ case 's':
if (source == 0) {
// Creation du socket local printf("usage: cmd [-p|-s][-n ##]\n");
int sock= socket(AF_INET,SOCK_STREAM,0); exit(1) ;
if (source==1) {
// Creation de l'adresse du socket distant
struct hostent *hp ;
struct sockaddr_in adr_dest;
int longueur_adr_dest = sizeof(adr_dest);
int longueur_message = BASE_SIZE;
memset((char *)& adr_dest, 0, sizeof(adr_dest)) ;
adr_dest.sin_family=AF_INET;
adr_dest.sin_port=port;
if ((hp = gethostbyname(nom_machine_distante)) == NULL) {
printf("erreur gethostbyname\n") ;
exit(1) ;
}
memcpy( (char*)&(adr_dest.sin_addr.s_addr),
hp->h_addr,
hp->h_length ) ;
// Demande de connexion
int succ;
if ((succ=connect(sock,(struct sockaddr*) &adr_dest,longueur_adr_dest))!=0){
printf("Echec connect");
exit(1);
}
// Envoie des messages
for (int i = 0; i < nb_message; i++) {
// Construction du message
construire_message(message, 'a' + (i % 26), BASE_SIZE);
// Envoi du message
write(sock,message,longueur_message);
}
// Close socket to avoid dangling connections
close(sock);
}
else {
// Creation de l'adresse du socket local
struct sockaddr_in adr_locale;
socklen_t longueur_adr_locale = sizeof(adr_locale);
int longueur_message = BASE_SIZE;
memset((char *)& adr_locale, 0, sizeof(adr_locale)) ;
adr_locale.sin_family=AF_INET;
adr_locale.sin_port=port;
adr_locale.sin_addr.s_addr = INADDR_ANY;
// Bind the local socket to any local address (ie any available interface)
if (bind(sock, (struct sockaddr *) &adr_locale, longueur_adr_locale) == -1) {
printf("failed to bind\n");
exit(1);
}
// set linstening queue size
if (listen(sock, 5) == -1) {
printf("échec et mat listen\n");
exit(1);
}
int sock_bis;
// Accept a single connection on the main thread
if ((sock_bis = accept( sock, (struct sockaddr *)&adr_locale, &longueur_adr_locale)) == -1){
printf("échec du accept\n") ;
exit(1) ;
}
while (read(sock_bis, message, longueur_message) > 0) {
afficher_message(message, longueur_message);
}
close(sock_bis);
close(sock);
}
} }
source = 1;
break;
exit(0); case 'n':
nb_message = atoi(optarg);
break;
case 'u':
udp=1;
break;
default:
printf("usage: cmd [-p|-s][-n ##]\n");
break;
}
}
char* nom_machine_distante;
// Recuperation du port
int port=atoi(argv[argc-1]);
port = htons(port);
char* message = malloc(BASE_SIZE * sizeof(char));
if (source == -1) {
printf("usage: cmd [-p|-s][-n ##]\n");
exit(1) ;
}
if (source == 1) {
//Recuperation du nom logique
nom_machine_distante=argv[argc-2];
} else printf("PUITS:");
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");
}
if (udp==1){
// Creation du socket local
int sock= socket(AF_INET,SOCK_DGRAM,0);
if (source==1) {
// Creation de l'adresse du socket distant
struct hostent *hp ;
struct sockaddr_in adr_dest;
int longueur_adr_dest = sizeof(adr_dest);
int longueur_message = BASE_SIZE;
memset((char *)& adr_dest, 0, sizeof(adr_dest)) ;
adr_dest.sin_family=AF_INET;
adr_dest.sin_port=port;
if ((hp = gethostbyname(nom_machine_distante)) == NULL) {
printf("erreur gethostbyname\n") ;
exit(1) ;
}
memcpy( (char*)&(adr_dest.sin_addr.s_addr),
hp->h_addr,
hp->h_length ) ;
for (int i = 0; i < nb_message; i++) {
// Construction du message
construire_message(message, 'a' + (i % 26), BASE_SIZE);
// Envoi du message
sendto(sock,message,longueur_message,0,(struct sockaddr*)&adr_dest,longueur_adr_dest);
}
}
else {
// Creation de l'adresse du socket distant
struct sockaddr_in adr_locale;
int longueur_adr_locale = sizeof(adr_locale);
int longueur_message = BASE_SIZE;
memset((char *)& adr_locale, 0, sizeof(adr_locale)) ;
adr_locale.sin_family=AF_INET;
adr_locale.sin_port=port;
adr_locale.sin_addr.s_addr = INADDR_ANY;
// Bind the local socket to any local address (ie any available interface)
if (bind(sock, (struct sockaddr *) &adr_locale, longueur_adr_locale) == -1) {
printf("failed to bind\n");
exit(1);
}
while (1) {
// Receive a single message because we are lazy
recvfrom(sock, message, longueur_message, 0, NULL, NULL);
// Afficher notre seule et unique triste message
afficher_message(message, longueur_message);
}
}
}
else{
// Creation du socket local
int sock= socket(AF_INET,SOCK_STREAM,0);
if (source==1) {
// Creation de l'adresse du socket distant
struct hostent *hp ;
struct sockaddr_in adr_dest;
int longueur_adr_dest = sizeof(adr_dest);
int longueur_message = BASE_SIZE;
memset((char *)& adr_dest, 0, sizeof(adr_dest)) ;
adr_dest.sin_family=AF_INET;
adr_dest.sin_port=port;
if ((hp = gethostbyname(nom_machine_distante)) == NULL) {
printf("erreur gethostbyname\n") ;
exit(1) ;
}
memcpy( (char*)&(adr_dest.sin_addr.s_addr),
hp->h_addr,
hp->h_length ) ;
// Demande de connexion
int succ;
if ((succ=connect(sock,(struct sockaddr*) &adr_dest,longueur_adr_dest))!=0){
printf("Echec connect");
exit(1);
}
// Envoie des messages
for (int i = 0; i < nb_message; i++) {
// Construction du message
construire_message(message, 'a' + (i % 26), BASE_SIZE);
// Envoi du message
write(sock,message,longueur_message);
}
// Close socket to avoid dangling connections
close(sock);
}
else {
// Creation de l'adresse du socket local
struct sockaddr_in adr_locale;
socklen_t longueur_adr_locale = sizeof(adr_locale);
int longueur_message = BASE_SIZE;
memset((char *)& adr_locale, 0, sizeof(adr_locale)) ;
adr_locale.sin_family=AF_INET;
adr_locale.sin_port=port;
adr_locale.sin_addr.s_addr = INADDR_ANY;
// Bind the local socket to any local address (ie any available interface)
if (bind(sock, (struct sockaddr *) &adr_locale, longueur_adr_locale) == -1) {
printf("failed to bind\n");
exit(1);
}
// set linstening queue size
if (listen(sock, 5) == -1) {
printf("échec et mat listen\n");
exit(1);
}
int sock_bis;
// Accept a single connection on the main thread
if ((sock_bis = accept( sock, (struct sockaddr *)&adr_locale, &longueur_adr_locale)) == -1){
printf("échec du accept\n") ;
exit(1) ;
}
while (read(sock_bis, message, longueur_message) > 0) {
afficher_message(message, longueur_message);
}
close(sock_bis);
close(sock);
}
}
exit(0);
} }

View file

@ -11,7 +11,7 @@
/* constantes et structures propres au domaine INTERNET */ /* constantes et structures propres au domaine INTERNET */
#include <netinet/in.h> #include <netinet/in.h>
/* structures retournées par les fonctions de gestion de la base de /* structures retournées par les fonctions de gestion de la base de
données du réseau */ données du réseau */
#include <netdb.h> #include <netdb.h>
/* pour les entrées/sorties */ /* pour les entrées/sorties */
#include <stdio.h> #include <stdio.h>
@ -32,286 +32,286 @@ int count_digits(int lg);
int main (int argc, char **argv) int main (int argc, char **argv)
{ {
int c; int c;
extern char *optarg; extern char *optarg;
extern int optind; extern int optind;
int nb_message = -1; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */ 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 source = -1 ; /* 0=puits, 1=source */
int udp=0; /* 0=TCP, 1=UDP */ int udp=0; /* 0=TCP, 1=UDP */
int lg=-1; /* Longueur des messages à envoyer ou recevoir: par défaut 30 octets */ int lg=-1; /* Longueur des messages à envoyer ou recevoir: par défaut 30 octets */
while ((c = getopt(argc, argv, "pn:sul:")) != -1) { while ((c = getopt(argc, argv, "pn:sul:")) != -1) {
switch (c) { switch (c) {
case 'p': case 'p':
if (source == 1) { if (source == 1) {
printf("usage: cmd [-p|-s][-n ##]\n"); printf("usage: cmd [-p|-s][-n ##]\n");
exit(1); exit(1);
} }
source = 0; source = 0;
break; break;
case 's': case 's':
if (source == 0) { if (source == 0) {
printf("usage: cmd [-p|-s][-n ##]\n"); printf("usage: cmd [-p|-s][-n ##]\n");
exit(1) ; exit(1) ;
} }
source = 1; source = 1;
break; break;
case 'n': case 'n':
nb_message = atoi(optarg); nb_message = atoi(optarg);
// Packets are numerotated with 5 figures, which means the number of // Packets are numerotated with 5 figures, which means the number of
// packets send can't be bigger than (or equal) 10 ** 6 // packets send can't be bigger than (or equal) 10 ** 6
if(nb_message >= 100000) { if(nb_message >= 100000) {
printf("Too many packets"); printf("Too many packets");
exit(1); exit(1);
}
break;
case 'u':
udp=1;
break;
case 'l':
lg=atoi(optarg);
// A TCP packet is roughly 1500 bytes. We allow for some overhead.
// We provide an MTU of 1400 bytes.
if(lg >= 1400) {
printf("Messages too long");
exit(1);
}
break;
default:
printf("usage: cmd [-p|-s][-n ##]\n");
break;
}
}
char* nom_machine_distante;
// Recuperation du port
int port=atoi(argv[argc-1]);
//port = htons(port);
// Default set of packet length : 30 bytes
if (lg == -1) {
lg=30;
}
//Allocation du message, il est de la taille donnée en paramètre
char* message = malloc(lg * sizeof(char));
if (source == -1) {
printf("usage: cmd [-p|-s][-n ##]\n");
exit(1) ;
}
// If number of messages is not fixed for the source, it is set to 10 messages
if (nb_message == -1 && source ) {
nb_message = 10 ;
}
//Affichage des informations de communication initiée
if (source == 1) {
//Recuperation du nom logique
nom_machine_distante=argv[argc-2];
printf("SOURCE:lg_mesg_emis=%d,port=%d,nb_envois=%d,TP=%s,dest=%s\n",
lg,port,nb_message,(udp)?"UDP":"TCP",nom_machine_distante);
} else {
printf("PUITS:lg_mesg-lu=%d,port=%d,nb_receptions=",lg,port);
if (nb_message!=-1 && !source) {
printf("infini");
}
else {
printf("%d",nb_message);
}
printf(", TP=%s\n",(udp)?"UDP":"TCP");
}
// Communnication through UDP messages
if (udp==1){
// Creation du socket local
int sock= socket(AF_INET,SOCK_DGRAM,0);
if (source==1) {
// Creation de l'adresse du socket distant
struct hostent *hp ;
struct sockaddr_in adr_dest;
int longueur_adr_dest = sizeof(adr_dest);
int longueur_message = lg;
memset((char *)& adr_dest, 0, sizeof(adr_dest)) ;
adr_dest.sin_family=AF_INET;
adr_dest.sin_port=port;
if ((hp = gethostbyname(nom_machine_distante)) == NULL) {
printf("erreur gethostbyname\n") ;
exit(1) ;
}
memcpy( (char*)&(adr_dest.sin_addr.s_addr),
hp->h_addr,
hp->h_length ) ;
for (int i = 0; i < nb_message; i++) {
// Construction du message
construire_message(message, 'a' + (i % 26), lg);
// Envoi du message
afficher_message_envoi(message,lg,i+1);
sendto(sock,message,longueur_message,0,(struct sockaddr*)&adr_dest,longueur_adr_dest);
}
}
else {
// Creation de l'adresse du socket distant
struct sockaddr_in adr_locale;
int longueur_adr_locale = sizeof(adr_locale);
memset((char *)& adr_locale, 0, sizeof(adr_locale)) ;
adr_locale.sin_family=AF_INET;
adr_locale.sin_port=port;
adr_locale.sin_addr.s_addr = INADDR_ANY;
// Bind the local socket to any local address (ie any available interface)
if (bind(sock, (struct sockaddr *) &adr_locale, longueur_adr_locale) == -1) {
printf("failed to bind\n");
exit(1);
}
// Suivi du numéro de message reçu
int k=0;
while (1) {
// Receive a single message because we are lazy
recvfrom(sock, message, lg, 0, NULL, NULL);
k++;
// Afficher notre seule et unique triste message
afficher_message_reception(message, lg, k);
}
}
} }
else{ break;
// Creation du socket local
int sock= socket(AF_INET,SOCK_STREAM,0);
if (source==1) { case 'u':
udp=1;
break;
case 'l':
lg=atoi(optarg);
// Creation de l'adresse du socket distant // A TCP packet is roughly 1500 bytes. We allow for some overhead.
struct hostent *hp ; // We provide an MTU of 1400 bytes.
struct sockaddr_in adr_dest; if(lg >= 1400) {
int longueur_adr_dest = sizeof(adr_dest); printf("Messages too long");
exit(1);
int longueur_message = lg;
memset((char *)& adr_dest, 0, sizeof(adr_dest)) ;
adr_dest.sin_family=AF_INET;
adr_dest.sin_port=port;
if ((hp = gethostbyname(nom_machine_distante)) == NULL) {
printf("erreur gethostbyname\n") ;
exit(1) ;
}
memcpy( (char*)&(adr_dest.sin_addr.s_addr),
hp->h_addr,
hp->h_length ) ;
// Demande de connexion
int succ;
if ((succ=connect(sock,(struct sockaddr*) &adr_dest,longueur_adr_dest))!=0){
printf("Echec connect");
exit(1);
}
// Envoi des messages
for (int i = 0; i < nb_message; i++) {
// Construction du message
construire_message(message, 'a' + (i % 26), lg);
afficher_message_envoi(message,lg,i+1);
// Envoi du message
write(sock,message,longueur_message);
}
// Close socket to avoid dangling connections
close(sock);
}
else {
// Creation de l'adresse du socket local
struct sockaddr_in adr_locale;
socklen_t longueur_adr_locale = sizeof(adr_locale);
int longueur_message = lg;
memset((char *)& adr_locale, 0, sizeof(adr_locale)) ;
adr_locale.sin_family=AF_INET;
adr_locale.sin_port=port;
adr_locale.sin_addr.s_addr = INADDR_ANY;
// Bind the local socket to any local address (ie any available interface)
if (bind(sock, (struct sockaddr *) &adr_locale, longueur_adr_locale) == -1) {
printf("failed to bind\n");
exit(1);
}
// set linstening queue size
if (listen(sock, 5) == -1) {
printf("échec et mat listen\n");
exit(1);
}
int sock_bis;
// Accept a single connection on the main thread
if ((sock_bis = accept( sock, (struct sockaddr *)&adr_locale, &longueur_adr_locale)) == -1){
printf("échec du accept\n") ;
exit(1) ;
}
// Suivi du numéro de message reçu
int k=0;
while (read(sock_bis, message, longueur_message) > 0) {
afficher_message_reception(message, longueur_message,k);
k++;
}
close(sock_bis);
close(sock);
}
} }
break;
exit(0); default:
printf("usage: cmd [-p|-s][-n ##]\n");
break;
}
}
char* nom_machine_distante;
// Recuperation du port
int port=atoi(argv[argc-1]);
//port = htons(port);
// Default set of packet length : 30 bytes
if (lg == -1) {
lg=30;
}
//Allocation du message, il est de la taille donnée en paramètre
char* message = malloc(lg * sizeof(char));
if (source == -1) {
printf("usage: cmd [-p|-s][-n ##]\n");
exit(1) ;
}
// If number of messages is not fixed for the source, it is set to 10 messages
if (nb_message == -1 && source ) {
nb_message = 10 ;
}
//Affichage des informations de communication initiée
if (source == 1) {
//Recuperation du nom logique
nom_machine_distante=argv[argc-2];
printf("SOURCE:lg_mesg_emis=%d,port=%d,nb_envois=%d,TP=%s,dest=%s\n",
lg,port,nb_message,(udp)?"UDP":"TCP",nom_machine_distante);
} else {
printf("PUITS:lg_mesg-lu=%d,port=%d,nb_receptions=",lg,port);
if (nb_message!=-1 && !source) {
printf("infini");
}
else {
printf("%d",nb_message);
}
printf(", TP=%s\n",(udp)?"UDP":"TCP");
}
// Communnication through UDP messages
if (udp==1){
// Creation du socket local
int sock= socket(AF_INET,SOCK_DGRAM,0);
if (source==1) {
// Creation de l'adresse du socket distant
struct hostent *hp ;
struct sockaddr_in adr_dest;
int longueur_adr_dest = sizeof(adr_dest);
int longueur_message = lg;
memset((char *)& adr_dest, 0, sizeof(adr_dest)) ;
adr_dest.sin_family=AF_INET;
adr_dest.sin_port=port;
if ((hp = gethostbyname(nom_machine_distante)) == NULL) {
printf("erreur gethostbyname\n") ;
exit(1) ;
}
memcpy( (char*)&(adr_dest.sin_addr.s_addr),
hp->h_addr,
hp->h_length ) ;
for (int i = 0; i < nb_message; i++) {
// Construction du message
construire_message(message, 'a' + (i % 26), lg);
// Envoi du message
afficher_message_envoi(message,lg,i+1);
sendto(sock,message,longueur_message,0,(struct sockaddr*)&adr_dest,longueur_adr_dest);
}
}
else {
// Creation de l'adresse du socket distant
struct sockaddr_in adr_locale;
int longueur_adr_locale = sizeof(adr_locale);
memset((char *)& adr_locale, 0, sizeof(adr_locale)) ;
adr_locale.sin_family=AF_INET;
adr_locale.sin_port=port;
adr_locale.sin_addr.s_addr = INADDR_ANY;
// Bind the local socket to any local address (ie any available interface)
if (bind(sock, (struct sockaddr *) &adr_locale, longueur_adr_locale) == -1) {
printf("failed to bind\n");
exit(1);
}
// Suivi du numéro de message reçu
int k=0;
while (1) {
// Receive a single message because we are lazy
recvfrom(sock, message, lg, 0, NULL, NULL);
k++;
// Afficher notre seule et unique triste message
afficher_message_reception(message, lg, k);
}
}
}
else{
// Creation du socket local
int sock= socket(AF_INET,SOCK_STREAM,0);
if (source==1) {
// Creation de l'adresse du socket distant
struct hostent *hp ;
struct sockaddr_in adr_dest;
int longueur_adr_dest = sizeof(adr_dest);
int longueur_message = lg;
memset((char *)& adr_dest, 0, sizeof(adr_dest)) ;
adr_dest.sin_family=AF_INET;
adr_dest.sin_port=port;
if ((hp = gethostbyname(nom_machine_distante)) == NULL) {
printf("erreur gethostbyname\n") ;
exit(1) ;
}
memcpy( (char*)&(adr_dest.sin_addr.s_addr),
hp->h_addr,
hp->h_length ) ;
// Demande de connexion
int succ;
if ((succ=connect(sock,(struct sockaddr*) &adr_dest,longueur_adr_dest))!=0){
printf("Echec connect");
exit(1);
}
// Envoi des messages
for (int i = 0; i < nb_message; i++) {
// Construction du message
construire_message(message, 'a' + (i % 26), lg);
afficher_message_envoi(message,lg,i+1);
// Envoi du message
write(sock,message,longueur_message);
}
// Close socket to avoid dangling connections
close(sock);
}
else {
// Creation de l'adresse du socket local
struct sockaddr_in adr_locale;
socklen_t longueur_adr_locale = sizeof(adr_locale);
int longueur_message = lg;
memset((char *)& adr_locale, 0, sizeof(adr_locale)) ;
adr_locale.sin_family=AF_INET;
adr_locale.sin_port=port;
adr_locale.sin_addr.s_addr = INADDR_ANY;
// Bind the local socket to any local address (ie any available interface)
if (bind(sock, (struct sockaddr *) &adr_locale, longueur_adr_locale) == -1) {
printf("failed to bind\n");
exit(1);
}
// set linstening queue size
if (listen(sock, 5) == -1) {
printf("échec et mat listen\n");
exit(1);
}
int sock_bis;
// Accept a single connection on the main thread
if ((sock_bis = accept( sock, (struct sockaddr *)&adr_locale, &longueur_adr_locale)) == -1){
printf("échec du accept\n") ;
exit(1) ;
}
// Suivi du numéro de message reçu
int k=0;
while (read(sock_bis, message, longueur_message) > 0) {
afficher_message_reception(message, longueur_message,k);
k++;
}
close(sock_bis);
close(sock);
}
}
exit(0);
} }
@ -327,50 +327,50 @@ void afficher_message_envoi(char *message, int lg, int numero_envoi) {
int nb_digits = count_digits(numero_envoi); int nb_digits = count_digits(numero_envoi);
for (int l=5; l>nb_digits; l--) { for (int l=5; l>nb_digits; l--) {
printf("-"); printf("-");
} }
printf("%d",numero_envoi); printf("%d",numero_envoi);
for (i=0;i<lg;i++){ for (i=0;i<lg;i++){
printf("%c", message[i]); printf("%c", message[i]);
} }
printf("]\n"); printf("]\n");
} }
void afficher_message_reception(char *message, int lg, int numero_envoi) { void afficher_message_reception(char *message, int lg, int numero_envoi) {
int i; int i;
printf("PUITS: Reception n°%d (%d) [",numero_envoi,lg); printf("PUITS: Reception n°%d (%d) [",numero_envoi,lg);
int nb_digits = count_digits(numero_envoi); int nb_digits = count_digits(numero_envoi);
for (int l=5; l>nb_digits; l--) { for (int l=5; l>nb_digits; l--) {
printf("-"); printf("-");
} }
printf("%d",numero_envoi); printf("%d",numero_envoi);
for (i=0;i<lg;i++){ for (i=0;i<lg;i++){
printf("%c", message[i]); printf("%c", message[i]);
} }
printf("]\n"); printf("]\n");
} }
int count_digits(int lg) { int count_digits(int lg) {
int retour; int retour;
if (!lg){ if (!lg){
retour=1; retour=1;
} }
else { else {
retour=0; retour=0;
while (lg > 0) { while (lg > 0) {
lg/=10; lg/=10;
retour++; retour++;
} }
} }
return retour; return retour;
} }