chore: remove tabs, indent all c files
This commit is contained in:
parent
76d6a2b6a1
commit
3ad285eeca
4 changed files with 745 additions and 745 deletions
100
tsock_v0.c
100
tsock_v0.c
|
@ -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");
|
||||||
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
310
tsock_v1.c
310
tsock_v1.c
|
@ -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);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
496
tsock_v2.c
496
tsock_v2.c
|
@ -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);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
584
tsock_v3.c
584
tsock_v3.c
|
@ -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;
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue