(version v3): options n + l working and beautiful display of infos
This commit is contained in:
parent
fbed97383d
commit
76d6a2b6a1
1 changed files with 107 additions and 43 deletions
150
tsock_v3.c
150
tsock_v3.c
|
@ -19,19 +19,15 @@ données du réseau */
|
|||
#include <errno.h>
|
||||
#define BASE_SIZE 10
|
||||
|
||||
void construire_message(char *message, char motif, int lg) {
|
||||
int i;
|
||||
for (i=0;i<lg;i++) message[i] = motif;
|
||||
}
|
||||
|
||||
void afficher_message(char *message, int lg) {
|
||||
int i;
|
||||
printf("message reçu : ");
|
||||
for (i=0;i<lg;i++){
|
||||
printf("%c", message[i]);
|
||||
}
|
||||
printf("\n");
|
||||
}
|
||||
void construire_message(char* message, char motif, int lg);
|
||||
|
||||
// Affichage distinct entre envoi et reception pour une facilité d'utilisation
|
||||
void afficher_message_envoi(char *message, int lg, int numero_envoi);
|
||||
void afficher_message_reception(char *message, int lg, int numero_envoi);
|
||||
|
||||
// Permet de compter le nombre de digits d'un nombre, utile pour l'affichage [--143 ...]
|
||||
int count_digits(int lg);
|
||||
|
||||
|
||||
int main (int argc, char **argv)
|
||||
|
@ -42,7 +38,7 @@ int main (int argc, char **argv)
|
|||
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 udp=0; /* 0=TCP, 1=UDP */
|
||||
int lg=-1;
|
||||
int lg=-1; /* Longueur des messages à envoyer ou recevoir: par défaut 30 octets */
|
||||
|
||||
while ((c = getopt(argc, argv, "pn:sul:")) != -1) {
|
||||
switch (c) {
|
||||
|
@ -64,8 +60,9 @@ int main (int argc, char **argv)
|
|||
|
||||
case 'n':
|
||||
nb_message = atoi(optarg);
|
||||
//Indice packet limite to 5 characters
|
||||
if(n >= 100000) {
|
||||
// Packets are numerotated with 5 figures, which means the number of
|
||||
// packets send can't be bigger than (or equal) 10 ** 6
|
||||
if(nb_message >= 100000) {
|
||||
printf("Too many packets");
|
||||
exit(1);
|
||||
}
|
||||
|
@ -96,13 +93,14 @@ int main (int argc, char **argv)
|
|||
|
||||
// Recuperation du port
|
||||
int port=atoi(argv[argc-1]);
|
||||
port = htons(port);
|
||||
//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));
|
||||
|
||||
|
||||
|
@ -111,30 +109,31 @@ int main (int argc, char **argv)
|
|||
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",
|
||||
);
|
||||
} 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);
|
||||
lg,port,nb_message,(udp)?"UDP":"TCP",nom_machine_distante);
|
||||
} 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");
|
||||
|
||||
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);
|
||||
|
@ -168,9 +167,9 @@ int main (int argc, char **argv)
|
|||
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);
|
||||
}
|
||||
|
||||
|
@ -184,8 +183,6 @@ int main (int argc, char **argv)
|
|||
struct sockaddr_in adr_locale;
|
||||
int longueur_adr_locale = sizeof(adr_locale);
|
||||
|
||||
int longueur_message = lg;
|
||||
|
||||
memset((char *)& adr_locale, 0, sizeof(adr_locale)) ;
|
||||
|
||||
adr_locale.sin_family=AF_INET;
|
||||
|
@ -197,13 +194,16 @@ int main (int argc, char **argv)
|
|||
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, longueur_message, 0, NULL, NULL);
|
||||
|
||||
recvfrom(sock, message, lg, 0, NULL, NULL);
|
||||
k++;
|
||||
// Afficher notre seule et unique triste message
|
||||
afficher_message(message, longueur_message);
|
||||
afficher_message_reception(message, lg, k);
|
||||
}
|
||||
|
||||
|
||||
|
@ -250,11 +250,11 @@ int main (int argc, char **argv)
|
|||
exit(1);
|
||||
}
|
||||
|
||||
// Envoie des messages
|
||||
// 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);
|
||||
}
|
||||
|
@ -299,8 +299,12 @@ int main (int argc, char **argv)
|
|||
exit(1) ;
|
||||
}
|
||||
|
||||
// Suivi du numéro de message reçu
|
||||
int k=0;
|
||||
|
||||
while (read(sock_bis, message, longueur_message) > 0) {
|
||||
afficher_message(message, longueur_message);
|
||||
afficher_message_reception(message, longueur_message,k);
|
||||
k++;
|
||||
}
|
||||
close(sock_bis);
|
||||
close(sock);
|
||||
|
@ -310,3 +314,63 @@ int main (int argc, char **argv)
|
|||
exit(0);
|
||||
}
|
||||
|
||||
|
||||
void construire_message(char *message, char motif, int lg) {
|
||||
int i;
|
||||
for (i=0;i<lg;i++) message[i] = motif;
|
||||
}
|
||||
|
||||
void afficher_message_envoi(char *message, int lg, int numero_envoi) {
|
||||
int i;
|
||||
printf("SOURCE: Envoi n°%d (%d) [",numero_envoi,lg);
|
||||
|
||||
int nb_digits = count_digits(numero_envoi);
|
||||
|
||||
for (int l=5; l>nb_digits; l--) {
|
||||
printf("-");
|
||||
}
|
||||
|
||||
printf("%d",numero_envoi);
|
||||
|
||||
for (i=0;i<lg;i++){
|
||||
printf("%c", message[i]);
|
||||
}
|
||||
printf("]\n");
|
||||
}
|
||||
|
||||
void afficher_message_reception(char *message, int lg, int numero_envoi) {
|
||||
int i;
|
||||
printf("PUITS: Reception n°%d (%d) [",numero_envoi,lg);
|
||||
|
||||
int nb_digits = count_digits(numero_envoi);
|
||||
|
||||
for (int l=5; l>nb_digits; l--) {
|
||||
printf("-");
|
||||
}
|
||||
|
||||
printf("%d",numero_envoi);
|
||||
|
||||
for (i=0;i<lg;i++){
|
||||
printf("%c", message[i]);
|
||||
}
|
||||
printf("]\n");
|
||||
|
||||
}
|
||||
|
||||
int count_digits(int lg) {
|
||||
|
||||
int retour;
|
||||
|
||||
if (!lg){
|
||||
retour=1;
|
||||
}
|
||||
else {
|
||||
retour=0;
|
||||
while (lg > 0) {
|
||||
lg/=10;
|
||||
retour++;
|
||||
}
|
||||
}
|
||||
|
||||
return retour;
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue