inversion de roles

This commit is contained in:
nbillard 2023-02-13 09:15:04 +01:00
parent b00322effb
commit 49d771cba9

View file

@ -34,9 +34,9 @@ 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 transport = -1 ; /* 0=UDP, 1=TCP <- par défaut*/ int transport = -1 ; /* 0=UDP, 1=TCP <- par défaut*/
int client = 0; /* 0=client, 1=serveur */ int client = 0; /* 0=client, 1=serveur */
int recepteur = -1; /* 0=éméteur, 1=recepteur (pour un client) */ int recepteur = -1; /* 0=éméteur, 1=recepteur (pour un client) */
@ -112,11 +112,11 @@ int main (int argc, char **argv) {
transport = 1; transport = 1;
break; break;
case 'n': /* On choisit le nombre de messages à envoyer ou à lire. */ case 'n': /* On choisit le nombre de messages à envoyer ou à lire. */
nb_message = atoi(optarg); nb_message = atoi(optarg);
break; break;
case 'l': /* On choisit la longueur des messages à envoyer ou la longueur maximale des messages à lire. */ case 'l': /* On choisit la longueur des messages à envoyer ou la longueur maximale des messages à lire. */
lg_mesg = atoi(optarg); lg_mesg = atoi(optarg);
break; break;
@ -160,13 +160,14 @@ int main (int argc, char **argv) {
port = htons(port); port = htons(port);
pmesg = malloc(sizeof(char)*lg_mesg);
if (port<5000){ if (port<5000){
printf("Le numéro de port doit être supérieur à 5000.\n"); printf("Le numéro de port doit être supérieur à 5000.\n");
exit(1); exit(1);
} }
pmesg = malloc(sizeof(char)*lg_mesg);
if (transport==0) { //protocole UDP if (transport==0) { //protocole UDP
@ -175,7 +176,7 @@ int main (int argc, char **argv) {
if (nb_message == -1) { if (nb_message == -1) {
nb_message = 10; // par défaut nb_message = 10; // par défaut
} }
printf("SOURCE : lg_mesg_emis=%d, port=%d, nb_envois=%d, TP=udp, dest=%s\n", lg_mesg, port, nb_message, argv[argc-2]); printf("SOURCE : lg_mesg_emis=%d, port=%d, nb_envois=%d, TP=udp, dest=%s\n", lg_mesg, port, nb_message, argv[argc-2]);
@ -230,7 +231,7 @@ int main (int argc, char **argv) {
printf("PUITS : lg_mesg_lu=%d, port=%d, nb_receptions=%d, TP=udp\n", lg_mesg, port, nb_message); printf("PUITS : lg_mesg_lu=%d, port=%d, nb_receptions=%d, TP=udp\n", lg_mesg, port, nb_message);
} }
//création du socket //création du socket
if((sock=socket(AF_INET, SOCK_DGRAM,0)) == -1) { if((sock=socket(AF_INET, SOCK_DGRAM,0)) == -1) {
printf("echec de la creation du socket\n"); printf("echec de la creation du socket\n");
exit(1); exit(1);
@ -280,7 +281,7 @@ int main (int argc, char **argv) {
else { //connexion TCP else { //connexion TCP
//---------SOURCE---------// //---------SOURCE---------//
if (source == 1) { if (client == 1) {
if (nb_message ==-1) { if (nb_message ==-1) {
nb_message = 10; nb_message = 10;
@ -288,7 +289,7 @@ int main (int argc, char **argv) {
printf("SOURCE : lg_mesg_emis=%d, port=%d, nb_envois=%d, TP=tcp, dest=%s\n", lg_mesg, port, nb_message, argv[argc-2]); printf("SOURCE : lg_mesg_emis=%d, port=%d, nb_envois=%d, TP=tcp, dest=%s\n", lg_mesg, port, nb_message, argv[argc-2]);
//création du socket local //création du socket local
if((sock=socket(AF_INET, SOCK_STREAM,0)) == -1) { if((sock=socket(AF_INET, SOCK_STREAM,0)) == -1) {
printf("échec de la creation du socket\n"); printf("échec de la creation du socket\n");
exit(1); exit(1);
@ -319,17 +320,31 @@ int main (int argc, char **argv) {
printf("SOURCE: connect\n"); printf("SOURCE: connect\n");
if (lg_mesg<6){ if (recepteur == 1) {
printf("Erreur: la taille du buffer doit être >=6.\n"); lg_max=lg_mesg;
exit(1); if (nb_message == -1) {
} int count = 0;
while ((lg_mesg=recv(sock, pmesg, lg_max, 0))>0) {
//envoi count++;
for(i=0; i<nb_message; i++) { printf("PUITS: Reception ");
printf("SOURCE: Envoi "); afficher_message(pmesg, lg_mesg, count);
construire_message(pmesg, (char)((i%26)+97), lg_mesg); }
afficher_message(pmesg, lg_mesg, (i+1)); } else {
send(sock, pmesg, lg_mesg, 0); for (int k=0; k<nb_message; k++) {
if ((lg_mesg=recv(sock, pmesg, lg_max, 0))>0) {
printf("PUITS: Reception ");
afficher_message(pmesg, lg_mesg, (k+1));
}
}
}
} else {
//envoi
for(i=0; i<nb_message; i++) {
printf("SOURCE: Envoi ");
construire_message(pmesg, (char)((i%26)+97), lg_mesg);
afficher_message(pmesg, lg_mesg, (i+1));
send(sock, pmesg, lg_mesg, 0);
}
} }
if (close(sock)==-1) { if (close(sock)==-1) {
@ -350,7 +365,7 @@ int main (int argc, char **argv) {
} }
//création du socket //création du socket
if((sock=socket(AF_INET, SOCK_STREAM,0)) == -1) { if((sock=socket(AF_INET, SOCK_STREAM,0)) == -1) {
printf("echec de la creation du socket\n"); printf("echec de la creation du socket\n");
exit(1); exit(1);
@ -384,20 +399,30 @@ int main (int argc, char **argv) {
printf("PUITS: connexion acceptée\n"); printf("PUITS: connexion acceptée\n");
//reception if (source == 1) {
lg_max=lg_mesg; //envoi
if (nb_message == -1) { for(i=0; i<nb_message; i++) {
int count = 0; printf("SOURCE: Envoi ");
while ((lg_mesg=recv(sock_bis, pmesg, lg_max, 0))>0) { construire_message(pmesg, (char)((i%26)+97), lg_mesg);
count++; afficher_message(pmesg, lg_mesg, (i+1));
printf("PUITS: Reception "); send(sock_bis, pmesg, lg_mesg, 0);
afficher_message(pmesg, lg_mesg, count);
} }
} else { } else {
for (int k=0; k<nb_message; k++) { //reception
if ((lg_mesg=recv(sock_bis, pmesg, lg_max, 0))>0) { lg_max=lg_mesg;
if (nb_message == -1) {
int count = 0;
while ((lg_mesg=recv(sock_bis, pmesg, lg_max, 0))>0) {
count++;
printf("PUITS: Reception "); printf("PUITS: Reception ");
afficher_message(pmesg, lg_mesg, (k+1)); afficher_message(pmesg, lg_mesg, count);
}
} else {
for (int k=0; k<nb_message; k++) {
if ((lg_mesg=recv(sock_bis, pmesg, lg_max, 0))>0) {
printf("PUITS: Reception ");
afficher_message(pmesg, lg_mesg, (k+1));
}
} }
} }
} }
@ -410,4 +435,5 @@ int main (int argc, char **argv) {
printf("PUITS: fin\n"); printf("PUITS: fin\n");
} }
} }
free(pmesg);
} }