addinng comments
This commit is contained in:
parent
9fc81cedc0
commit
1d5ac76dfd
1 changed files with 113 additions and 63 deletions
|
@ -24,10 +24,12 @@ données du réseau */
|
||||||
#define NB_CLIENTS 1
|
#define NB_CLIENTS 1
|
||||||
#define TCP_BUFFER_LEN 2000
|
#define TCP_BUFFER_LEN 2000
|
||||||
|
|
||||||
|
// affiche l'utilisation de la fonction
|
||||||
void usage(char* prog) {
|
void usage(char* prog) {
|
||||||
printf("usage: %s [-p|-s][-u|-t][-n ##]\n", prog);
|
printf("usage: %s [-h][-p|-s][-u|-t][-n ##]\n", prog);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// remplit le message avec le charactere motif
|
||||||
void construire_message(char* message, char motif, int lg) {
|
void construire_message(char* message, char motif, int lg) {
|
||||||
for (int i = 0; i < lg; ++i) {
|
for (int i = 0; i < lg; ++i) {
|
||||||
message[i] = motif;
|
message[i] = motif;
|
||||||
|
@ -35,6 +37,7 @@ void construire_message(char* message, char motif, int lg) {
|
||||||
message[lg] = '\0';
|
message[lg] = '\0';
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// essaye de recevoir un message par udp et traite le message.
|
||||||
void recvudp(int sock, char* buffer, int buf_len, void* addr, unsigned int addr_len) {
|
void recvudp(int sock, char* buffer, int buf_len, void* addr, unsigned int addr_len) {
|
||||||
int lg_recv = recvfrom(sock, buffer, buf_len, 0, (struct sockaddr*) addr, &addr_len);
|
int lg_recv = recvfrom(sock, buffer, buf_len, 0, (struct sockaddr*) addr, &addr_len);
|
||||||
if (lg_recv == -1) {
|
if (lg_recv == -1) {
|
||||||
|
@ -49,6 +52,7 @@ void recvudp(int sock, char* buffer, int buf_len, void* addr, unsigned int addr_
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// essaye d'envoyer un message par udp et gere les erreurs
|
||||||
void sendudp(int sock, char* message, int msg_len, void* addr, unsigned int addr_len) {
|
void sendudp(int sock, char* message, int msg_len, void* addr, unsigned int addr_len) {
|
||||||
int lg_sent = sendto(sock, message, msg_len, 0, (struct sockaddr*) addr, addr_len);
|
int lg_sent = sendto(sock, message, msg_len, 0, (struct sockaddr*) addr, addr_len);
|
||||||
if (lg_sent == -1) {
|
if (lg_sent == -1) {
|
||||||
|
@ -61,9 +65,10 @@ void sendudp(int sock, char* message, int msg_len, void* addr, unsigned int addr
|
||||||
printf("message sent: %s\n", message);
|
printf("message sent: %s\n", message);
|
||||||
}
|
}
|
||||||
|
|
||||||
void recvtcp(int sock) {
|
/* void recvtcp(int sock) { */
|
||||||
}
|
/* } */
|
||||||
|
|
||||||
|
/* affiche les lg premier characteres de message */
|
||||||
void afficher_message(char* message, int lg) {
|
void afficher_message(char* message, int lg) {
|
||||||
message[lg] = '\0';
|
message[lg] = '\0';
|
||||||
printf("message construit: %s", message);
|
printf("message construit: %s", message);
|
||||||
|
@ -76,41 +81,42 @@ int main (int argc, char **argv)
|
||||||
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 */
|
||||||
char* hostname;
|
char* hostname; /* stocke la chaine de charactere de l'url avec la quelle on communique */
|
||||||
int tcp = -1; /* 0=tcp, 1=udp */
|
int tcp = -1; /* 0=tcp, 1=udp */
|
||||||
int sock;
|
int sock; /* identifiant du buffer */
|
||||||
char* message;
|
char* message; /* stocke le message à onvoyer ou à recevoir */
|
||||||
struct hostent *hp;
|
struct hostent *hp; /* structure pour rérupérer l'addresse de l'url */
|
||||||
struct sockaddr_in addr_local;
|
struct sockaddr_in addr_local;
|
||||||
struct sockaddr_in addr_distant;
|
struct sockaddr_in addr_distant;
|
||||||
|
/* taille de la structure d'addresse */
|
||||||
unsigned int addr_distant_len = sizeof(addr_distant);
|
unsigned int addr_distant_len = sizeof(addr_distant);
|
||||||
while ((c = getopt(argc, argv, "hpst:u:n:")) != -1) {
|
while ((c = getopt(argc, argv, "hpst:u:n:")) != -1) {
|
||||||
switch (c) {
|
switch (c) {
|
||||||
|
// affiche l'utilisation du programme
|
||||||
case 'h':
|
case 'h':
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
return 0;
|
return 0;
|
||||||
|
// mode puit
|
||||||
case 'p':
|
case 'p':
|
||||||
if (source == 1) {
|
if (source == 1) {
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
/* printf("usage: cmd [-p|-s][-n ##]\n"); */
|
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
source = 0;
|
source = 0;
|
||||||
break;
|
break;
|
||||||
|
// mode source
|
||||||
case 's':
|
case 's':
|
||||||
if (source == 0) {
|
if (source == 0) {
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
/* printf("usage: cmd [-p|-s][-n ##]\n"); */
|
|
||||||
exit(1) ;
|
exit(1) ;
|
||||||
}
|
}
|
||||||
source = 1;
|
source = 1;
|
||||||
break;
|
break;
|
||||||
|
// nombre de messages à afficher
|
||||||
case 'n':
|
case 'n':
|
||||||
nb_message = atoi(optarg);
|
nb_message = atoi(optarg);
|
||||||
break;
|
break;
|
||||||
|
// utilise le protocole UDP
|
||||||
case 'u':
|
case 'u':
|
||||||
if (tcp == 1) {
|
if (tcp == 1) {
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
|
@ -119,6 +125,7 @@ int main (int argc, char **argv)
|
||||||
tcp = 0;
|
tcp = 0;
|
||||||
hostname = optarg;
|
hostname = optarg;
|
||||||
break;
|
break;
|
||||||
|
// utilise le protocole TCP
|
||||||
case 't':
|
case 't':
|
||||||
if (tcp == 0) {
|
if (tcp == 0) {
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
|
@ -127,18 +134,19 @@ int main (int argc, char **argv)
|
||||||
tcp = 1;
|
tcp = 1;
|
||||||
hostname = optarg;
|
hostname = optarg;
|
||||||
break;
|
break;
|
||||||
|
// argument non reconnu
|
||||||
default:
|
default:
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
exit(1);
|
exit(1);
|
||||||
/* printf("usage: cmd [-p|-s][-n ##]\n"); */
|
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
// si le protocole n'a pas été défini par l'utilisateur, utiliser TCP
|
||||||
if (tcp == -1) {
|
if (tcp == -1) {
|
||||||
tcp = 1;
|
tcp = 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// si le mode de fonctionnement(source/puit) n'a pas été défini -> ERREUR
|
||||||
if (source == -1) {
|
if (source == -1) {
|
||||||
printf("outside\n");
|
printf("outside\n");
|
||||||
usage(argv[0]);
|
usage(argv[0]);
|
||||||
|
@ -146,30 +154,30 @@ int main (int argc, char **argv)
|
||||||
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 { */
|
||||||
// changed envoyer to recevoir
|
/* // changed envoyer to recevoir */
|
||||||
printf("nb de tampons à recevoir = infini\n");
|
/* printf("nb de tampons à recevoir = infini\n"); */
|
||||||
}
|
/* } */
|
||||||
|
|
||||||
}
|
/* } */
|
||||||
if (tcp) /* udp */ {
|
if (tcp) {
|
||||||
sock = socket(AF_INET, SOCK_DGRAM, 0);
|
|
||||||
} else {
|
|
||||||
sock = socket(AF_INET, SOCK_STREAM, 0);
|
sock = socket(AF_INET, SOCK_STREAM, 0);
|
||||||
|
} else /* if udp */ {
|
||||||
|
sock = socket(AF_INET, SOCK_DGRAM, 0);
|
||||||
}
|
}
|
||||||
if (sock < 0) {
|
if (sock < 0) {
|
||||||
perror("Error creating socket:");
|
perror("Error creating socket:");
|
||||||
|
@ -178,12 +186,15 @@ int main (int argc, char **argv)
|
||||||
|
|
||||||
printf("socket created\n");
|
printf("socket created\n");
|
||||||
|
|
||||||
|
// remplissage de l'addresse locale
|
||||||
memset(&addr_local, 0, sizeof(addr_local));
|
memset(&addr_local, 0, sizeof(addr_local));
|
||||||
addr_local.sin_family = AF_INET;
|
addr_local.sin_family = AF_INET;
|
||||||
addr_local.sin_port = DEFAULTPORT;
|
addr_local.sin_port = DEFAULTPORT;
|
||||||
addr_local.sin_addr.s_addr = INADDR_ANY;
|
addr_local.sin_addr.s_addr = INADDR_ANY;
|
||||||
|
|
||||||
printf("address built\n");
|
printf("address built\n");
|
||||||
|
|
||||||
|
// liaison entre l'addresse locale et le buffer(sock)
|
||||||
if (bind(sock, (struct sockaddr*) &addr_local, (sizeof(addr_local))) < 0 ) {
|
if (bind(sock, (struct sockaddr*) &addr_local, (sizeof(addr_local))) < 0 ) {
|
||||||
perror("Error while binding socket: ");
|
perror("Error while binding socket: ");
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -191,46 +202,36 @@ int main (int argc, char **argv)
|
||||||
|
|
||||||
printf("socket bound\n");
|
printf("socket bound\n");
|
||||||
|
|
||||||
if (!tcp) /* if udp activated */ {
|
memset(&addr_distant, 0, sizeof(addr_local));
|
||||||
printf("pas tcp\n");
|
addr_distant.sin_family = AF_INET;
|
||||||
memset(&addr_distant, 0, sizeof(addr_local));
|
addr_distant.sin_port = DEFAULTPORT;
|
||||||
addr_distant.sin_family = AF_INET;
|
hp = gethostbyname(hostname);
|
||||||
addr_distant.sin_port = DEFAULTPORT;
|
if (hp == NULL) {
|
||||||
hp = gethostbyname(hostname);
|
printf("hostname not found\n");
|
||||||
if (hp == NULL) {
|
herror("Error: ");
|
||||||
printf("hosname not found\n");
|
exit(1);
|
||||||
/* herror("Error: "); */
|
}
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
printf("hostname found\n");
|
|
||||||
|
|
||||||
memcpy(&addr_distant.sin_addr.s_addr, hp->h_addr, hp->h_length);
|
memcpy(&addr_distant.sin_addr.s_addr, hp->h_addr, hp->h_length);
|
||||||
} else /* tcp activated */{
|
|
||||||
|
printf("distant address built\n");
|
||||||
|
|
||||||
|
if (tcp) {
|
||||||
if (source) {
|
if (source) {
|
||||||
memset(&addr_distant, 0, sizeof(addr_local));
|
// envoie de connection au serveur TCP
|
||||||
addr_distant.sin_family = AF_INET;
|
|
||||||
addr_distant.sin_port = DEFAULTPORT;
|
|
||||||
hp = gethostbyname(hostname);
|
|
||||||
if (hp == NULL) {
|
|
||||||
printf("hosname not found\n");
|
|
||||||
/* herror("Error: "); */
|
|
||||||
exit(1);
|
|
||||||
}
|
|
||||||
printf("hostname found\n");
|
|
||||||
|
|
||||||
memcpy(&addr_distant.sin_addr.s_addr, hp->h_addr, hp->h_length);
|
|
||||||
|
|
||||||
if (connect(sock,(struct sockaddr*)&addr_distant, sizeof(addr_distant)) == -1) {
|
if (connect(sock,(struct sockaddr*)&addr_distant, sizeof(addr_distant)) == -1) {
|
||||||
printf("echec de la connexion\n");
|
printf("echec de la connexion\n");
|
||||||
exit(1);
|
exit(1);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
|
// ouverture pour l'écoute de connexions
|
||||||
if (listen(sock, NB_CLIENTS) < 0) {
|
if (listen(sock, NB_CLIENTS) < 0) {
|
||||||
perror("Server could not listen: ");
|
perror("Server could not listen: ");
|
||||||
exit(1);
|
exit(1);
|
||||||
} else {
|
} else {
|
||||||
printf("listening\n");
|
printf("listening\n");
|
||||||
}
|
}
|
||||||
|
// accepte la première demande de connexion
|
||||||
if (accept(sock, (struct sockaddr*) &addr_distant, &addr_distant_len) < 0) {
|
if (accept(sock, (struct sockaddr*) &addr_distant, &addr_distant_len) < 0) {
|
||||||
perror("Server could not accept connection: ");
|
perror("Server could not accept connection: ");
|
||||||
exit(1);
|
exit(1);
|
||||||
|
@ -240,6 +241,55 @@ int main (int argc, char **argv)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/* if (!tcp) /\* if udp activated *\/ { */
|
||||||
|
/* printf("pas tcp\n"); */
|
||||||
|
/* memset(&addr_distant, 0, sizeof(addr_local)); */
|
||||||
|
/* addr_distant.sin_family = AF_INET; */
|
||||||
|
/* addr_distant.sin_port = DEFAULTPORT; */
|
||||||
|
/* hp = gethostbyname(hostname); */
|
||||||
|
/* if (hp == NULL) { */
|
||||||
|
/* printf("hosname not found\n"); */
|
||||||
|
/* /\* herror("Error: "); *\/ */
|
||||||
|
/* exit(1); */
|
||||||
|
/* } */
|
||||||
|
/* printf("hostname found\n"); */
|
||||||
|
|
||||||
|
/* memcpy(&addr_distant.sin_addr.s_addr, hp->h_addr, hp->h_length); */
|
||||||
|
/* } else /\* tcp activated *\/{ */
|
||||||
|
/* if (source) { */
|
||||||
|
/* memset(&addr_distant, 0, sizeof(addr_local)); */
|
||||||
|
/* addr_distant.sin_family = AF_INET; */
|
||||||
|
/* addr_distant.sin_port = DEFAULTPORT; */
|
||||||
|
/* hp = gethostbyname(hostname); */
|
||||||
|
/* if (hp == NULL) { */
|
||||||
|
/* printf("hosname not found\n"); */
|
||||||
|
/* /\* herror("Error: "); *\/ */
|
||||||
|
/* exit(1); */
|
||||||
|
/* } */
|
||||||
|
/* printf("hostname found\n"); */
|
||||||
|
|
||||||
|
/* memcpy(&addr_distant.sin_addr.s_addr, hp->h_addr, hp->h_length); */
|
||||||
|
|
||||||
|
/* if (connect(sock,(struct sockaddr*)&addr_distant, sizeof(addr_distant)) == -1) { */
|
||||||
|
/* printf("echec de la connexion\n"); */
|
||||||
|
/* exit(1); */
|
||||||
|
/* } */
|
||||||
|
/* } else { */
|
||||||
|
/* if (listen(sock, NB_CLIENTS) < 0) { */
|
||||||
|
/* perror("Server could not listen: "); */
|
||||||
|
/* exit(1); */
|
||||||
|
/* } else { */
|
||||||
|
/* printf("listening\n"); */
|
||||||
|
/* } */
|
||||||
|
/* if (accept(sock, (struct sockaddr*) &addr_distant, &addr_distant_len) < 0) { */
|
||||||
|
/* perror("Server could not accept connection: "); */
|
||||||
|
/* exit(1); */
|
||||||
|
/* } else { */
|
||||||
|
/* printf("accepting request\n"); */
|
||||||
|
/* } */
|
||||||
|
/* } */
|
||||||
|
/* } */
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
message = malloc((MSG_LENGTH + 1) * sizeof(char));
|
message = malloc((MSG_LENGTH + 1) * sizeof(char));
|
||||||
|
@ -269,11 +319,11 @@ int main (int argc, char **argv)
|
||||||
}
|
}
|
||||||
} else /* udp activated */ {
|
} else /* udp activated */ {
|
||||||
if (source) {
|
if (source) {
|
||||||
construire_message(message, 'a', MSG_LENGTH);
|
|
||||||
if (nb_message < 0) {
|
if (nb_message < 0) {
|
||||||
nb_message = 10;
|
nb_message = 10;
|
||||||
}
|
}
|
||||||
for (int i = 0; i < nb_message; ++i) {
|
for (int i = 0; i < nb_message; ++i) {
|
||||||
|
construire_message(message, i % 26 + 'a', MSG_LENGTH);
|
||||||
sendudp(sock, message, MSG_LENGTH, &addr_distant, sizeof(addr_distant));
|
sendudp(sock, message, MSG_LENGTH, &addr_distant, sizeof(addr_distant));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue