From 81f1b68ff7ff0040724272dbf02e1aceaf57f8be Mon Sep 17 00:00:00 2001
From: 20050114 <20050114@studenti.uniupo.it>
Date: Fri, 17 May 2024 12:59:03 +0200
Subject: [PATCH] es finito

---
 .../Laboratorio/Assigment4/EchoServer3/client | Bin 17456 -> 17544 bytes
 .../Assigment4/EchoServer3/client.c           | 169 +++++++-------
 .../Laboratorio/Assigment4/EchoServer3/server | Bin 17504 -> 17544 bytes
 .../Assigment4/EchoServer3/server.c           | 219 +++++++++---------
 4 files changed, 190 insertions(+), 198 deletions(-)

diff --git a/Reti/Laboratorio/Assigment4/EchoServer3/client b/Reti/Laboratorio/Assigment4/EchoServer3/client
index 00c3da4cc31d46c2b704caf8973f7f2349388806..403f505de9e95754c50e52be97844733e1792cca 100755
GIT binary patch
delta 3254
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
M=Wa5vGE9!=TO6ooasU7T

delta 2862
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

diff --git a/Reti/Laboratorio/Assigment4/EchoServer3/client.c b/Reti/Laboratorio/Assigment4/EchoServer3/client.c
index 62c5706..b33f594 100644
--- a/Reti/Laboratorio/Assigment4/EchoServer3/client.c
+++ b/Reti/Laboratorio/Assigment4/EchoServer3/client.c
@@ -7,91 +7,92 @@
 #include <sys/types.h>
 #include <unistd.h>
 
-void clean_buffer(void* buffer, size_t buffer_size){ 
-    char* bufferChar = (char *) buffer;
-    for(size_t i = 0; i < buffer_size; ++i){
-        bufferChar[i] = '\0';
-    }
+void clean_buffer(void *buffer, size_t buffer_size) {
+  char *bufferChar = (char *)buffer;
+  for (size_t i = 0; i < buffer_size; ++i) {
+    bufferChar[i] = '\0';
+  }
 }
 
-int main(int argc, char *argv[])
-{
-    char valueToSend[256] = {'\0'};
-    char valueToReceive[256] = {'\0'};
-    char iterationsServer[256] = {'\0'};
-
-    printf("Inserire il numero di iterazioni: ");
-    scanf("%s", iterationsServer);
-
-    int simpleSocket = 0;
-    int simplePort = 0;
-    int returnStatus = 0;
-    char buffer[256] = "";
-    struct sockaddr_in simpleServer;
-
-    if (argc != 3)
-    {
-        fprintf(stderr, "Usage: %s <server> <port>\n", argv[0]);
-        exit(1);
-    }
-
-    /* create a streaming socket      */
-    simpleSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-
-    if (simpleSocket == -1)
-    {
-        fprintf(stderr, "Could not create a socket!\n");
-        exit(1);
-    }
-    else
-    {
-        fprintf(stderr, "Socket created!\n");
-    }
-
-    /* retrieve the port number for connecting */
-    simplePort = atoi(argv[2]);
-
-    /* setup the address structure */
-    /* use the IP address sent as an argument for the server address  */
-    // bzero(&simpleServer, sizeof(simpleServer));
-    memset(&simpleServer, '\0', sizeof(simpleServer));
-    simpleServer.sin_family = AF_INET;
-    // inet_addr(argv[2], &simpleServer.sin_addr.s_addr);
-    simpleServer.sin_addr.s_addr = inet_addr(argv[1]);
-    simpleServer.sin_port = htons(simplePort);
-
-    /*  connect to the address and port with our socket  */
-    returnStatus = connect(simpleSocket, (struct sockaddr *)&simpleServer,
-                           sizeof(simpleServer));
-
-    if (returnStatus == 0)
-    {
-        fprintf(stderr, "Connect successful!\n");
-    }
-    else
-    {
-        fprintf(stderr, "Could not connect to address!\n");
-        close(simpleSocket);
-        exit(1);
-    }
-
-    // Inviando il numero di iterazioni al server
-    write(simpleSocket, iterationsServer, strlen(iterationsServer));
-
-    // Aspettando l'ACK
-    read(simpleSocket, valueToReceive, sizeof(valueToReceive));
-    printf("%s\n", valueToReceive);
-
-    int iterations = atoi(iterationsServer);
-    for (int i = 0; i < iterations; ++i)
-    {
-        clean_buffer((void *) valueToReceive, sizeof(valueToReceive));
-        printf("Inserire il valore da voler inviare al server: ");
-        scanf("%s", valueToSend);
-        write(simpleSocket, valueToSend, strlen(valueToSend));
-        read(simpleSocket, valueToReceive, sizeof(valueToReceive));
-        printf("\nEcho: %s\n", valueToReceive);
-    }
+int main(int argc, char *argv[]) {
+  char valueToSend[256] = {'\0'};
+  char valueToReceive[256] = {'\0'};
+  char iterationsServer[256] = {'\0'};
+
+  printf("Inserire il numero di iterazioni: ");
+  scanf("%s", iterationsServer);
+
+  int simpleSocket = 0;
+  int simplePort = 0;
+  int returnStatus = 0;
+  char buffer[256] = "";
+  struct sockaddr_in simpleServer;
+
+  if (argc != 3) {
+    fprintf(stderr, "Usage: %s <server> <port>\n", argv[0]);
+    exit(1);
+  }
+
+  /* create a streaming socket      */
+  simpleSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+
+  if (simpleSocket == -1) {
+    fprintf(stderr, "Could not create a socket!\n");
+    exit(1);
+  } else {
+    fprintf(stderr, "Socket created!\n");
+  }
+
+  /* retrieve the port number for connecting */
+  simplePort = atoi(argv[2]);
+
+  /* setup the address structure */
+  /* use the IP address sent as an argument for the server address  */
+  // bzero(&simpleServer, sizeof(simpleServer));
+  memset(&simpleServer, '\0', sizeof(simpleServer));
+  simpleServer.sin_family = AF_INET;
+  // inet_addr(argv[2], &simpleServer.sin_addr.s_addr);
+  simpleServer.sin_addr.s_addr = inet_addr(argv[1]);
+  simpleServer.sin_port = htons(simplePort);
+
+  /*  connect to the address and port with our socket  */
+  returnStatus = connect(simpleSocket, (struct sockaddr *)&simpleServer,
+                         sizeof(simpleServer));
+
+  if (returnStatus == 0) {
+    fprintf(stderr, "Connect successful!\n");
+  } else {
+    fprintf(stderr, "Could not connect to address!\n");
     close(simpleSocket);
-    return 0;
+    exit(1);
+  }
+
+  // Inviando il numero di iterazioni al server
+  write(simpleSocket, iterationsServer, strlen(iterationsServer));
+
+  // Aspettando l'ACK
+  read(simpleSocket, valueToReceive, sizeof(valueToReceive));
+  if (strcmp(valueToReceive, "ACK") != 0) {
+    fprintf(stderr, "Invalid ACK");
+    exit(0);
+  }
+  printf("%s\n", valueToReceive);
+
+  int iterations = atoi(iterationsServer);
+  for (int i = 0; i < iterations; ++i) {
+    clean_buffer((void *)valueToReceive, sizeof(valueToReceive));
+    printf("Inserire il valore da voler inviare al server: ");
+    scanf("%s", valueToSend);
+    write(simpleSocket, valueToSend, strlen(valueToSend));
+    read(simpleSocket, valueToReceive, sizeof(valueToReceive));
+    printf("\nEcho: %s\n", valueToReceive);
+  }
+
+  // Mando BYE
+  clean_buffer((void *)valueToSend, sizeof(valueToSend));
+  snprintf(valueToSend, sizeof(valueToSend), "BYE");
+  write(simpleSocket, valueToSend, sizeof(valueToSend));
+
+  close(simpleSocket);
+  return 0;
 }
diff --git a/Reti/Laboratorio/Assigment4/EchoServer3/server b/Reti/Laboratorio/Assigment4/EchoServer3/server
index c74259722a9539a0f3d04948bf995c13e76a3e20..4afb8b029004ffe5be2eea8030e5f58cf9ce9552 100755
GIT binary patch
delta 2762
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

delta 2589
zcmZ`*drVVT7(b__(91(wO1ZrPmevsqQd-_cSGffuW$31xDBFw!2N9OdVMGTJH;8eu
zLn82n1(Pjv&Nxim7Sfog(FHS|EYm2-vcQHL{;{PvgQ9G~SMI+1!s^^f?)iO>-}%1p
zJllN%I=PSbSd51fh}3u)$f4ehFBwa;tXX=;T};CQS!n<xb@>`KvZf+2$T~%c#LwZB
zb%*y!3@PLE&`DXNM`3vsmIsc}D+#k{@|ed6A89t({x9U15^@X}ZLMj{4u-YGgUyEN
zKmTI$j+qC%yP#d`;4BzZEsoGmF@r|5ad1|<m>z-aT9&>D#t0X!#h#@H#2%U>EVMw9
zdUO`3)mi9n7)8z-5@#4kxxkIq=OulM)UShHor|uP<SSxaxUF;3tze5}=}IV$<l+6u
z^WckO;kBrgN{Us9bt&sdb}VdSurx9tR)|eqK)tMz4wEdnl_gW{Je-Rv<CG1PD4`OW
zDQ-s`r0QADEE}YLF3f9z)q0k4uv^bUyFNC~ulS;nsfDl5dK|4aVOAYnL+b=u8^f$o
z5XZ0(%f!aDhFKZ#GAtJpmU~~AHx}MOuX45|&On$q9zMm0pJ2qnFsl(RqxBM6Plj1d
z@CdCB(K-@lO#){$3t7>z!Tt7-uFqiCN4p5QBc#U!GY!jV0ZQH3gv49R3Ar1;=sxNf
z@KlEDXP?qfID>7*7z*bT64rl=^YVAcStamB;7$tW1mw^5_`AKuDEPZ|xgr$LwV3@~
zy6G&G_YSu(!eqR)L!9q-3L>A8_yrm#WSNrb1@M~|Wn9AnWXIBK{~qsQQS=A?Xo>ZA
zd5@wJy7x#BLiK_me6KqJ2TT|Ap`~KRf*)XGB5yt<DuHvSlX2L$;u*sfAHq<g*}PNn
zh=)$~w8F26elw?d(!)GX@R%<zD9R+HtN-K!LBIs9U`i@9-_7`Mf=bwwWT$7KGs#4=
zp+Bk3oc#>e>EL2^kWy#xl4U=oUk6`ZI3q$;$_7ds;fvH4d|i7-Fje4U=%2fSF!lSK
zAoPga<J+*R+q>LKh;Mym;AdZTW#Dh$I$z*nwZGe$h2~dQWjyllxv3A`3T|E0N1-;l
zwl8gB^UDoyHZ<*Qs9%<rzCD`w%Bo2EcAO!h$=c<9MDZ47-4cX$#J6t?!V$!F#50J;
zX9S@hvHy-B{De4$IE#4mp&%sUvTnpp*hpc$&7R656;Br-<x$doeh$Ta{0655frozE
z;+$bjqF!~8n228sekalH7WYVLDTw>=I|WlVt8N10njp@ethxFCGVLpMbGSCTV5j}F
zXq;gdqdp2eWH?>MnniLDPKo7!Ca0CUA>edT51c}I3dWJ=P_Bvcev%R3vaQB7%8Mdi
zezCPeW%f(71`cLhsU1#bZ^0Ng*Ehj2mxZD@<7Uxp%Q0&iQiI4sT27KShOB|LITiSp
z4xuNWG$XQ{`XeI;mU}HR;<)QME>3;!pY$dY9*ntWt(iE$m&@Wbe5kR+1KUt@Kp^)$
zdKG9M%Ms;eRL9#;(BQkuLr$Ix$JHT6T_}~)h5{vG?B2WzS`XuSE>3+}RnD-)5i{EI
zS<vSjawa5~i9B8LEs1F%>cUDi?5d$H-%8iO!TcrMG;VSl!L8v{uZ%y!Og>9<fGM!f
zZ=lNXz)%58?@N7^*mHFlB?0FaQ082wP`65)PO0yg`a!XW$pQ-<7bWf{jx;<Y|2@&G
zTYzUF4Tdx(nhM(rSuPWGBWA*qr52&&DHf~cs?aM|F_|ix8x-&BFk0xUyra~p?z(g_
zknt{#GLVJDz$<hGb}7*=DRVL@KV}`$%JfP7QK&1bpufSnB35?;`EsohFjK_RU!?h_
zfz89}^0inQ&Lc6n*5jr@DBhtBMtV0>+6+xATt<)hn}|)tDHzQ)!I>2)M!RzCRm_K}
z6)vVmvEl(QDFRE00UAr(^EXAkF(YuS<O4mA(-s?ymatI48<|?8Y^a4gz6fe~gI>Mp
z66GRqod5TwF4YN`;xVgok1?ySLNi0)EnjxDdgf-+;IOZd;caqo9<KW^c&Quwr3M(l
uud&q4JpNzxd1=x7eRn83F$Pnmf@UrXZj===9*-Qz4;ke}v;*qOm;4Ks?kW)g

diff --git a/Reti/Laboratorio/Assigment4/EchoServer3/server.c b/Reti/Laboratorio/Assigment4/EchoServer3/server.c
index a843b51..13eda18 100644
--- a/Reti/Laboratorio/Assigment4/EchoServer3/server.c
+++ b/Reti/Laboratorio/Assigment4/EchoServer3/server.c
@@ -9,129 +9,120 @@
 
 // const char MESSAGE[] = "Guess who's back!\n";
 
-void clean_buffer(void* buffer, size_t buffer_size){ 
-    char* bufferChar = (char *) buffer;
-    for(size_t i = 0; i < buffer_size; ++i){
-        bufferChar[i] = '\0';
-    }
+void clean_buffer(void *buffer, size_t buffer_size) {
+  char *bufferChar = (char *)buffer;
+  for (size_t i = 0; i < buffer_size; ++i) {
+    bufferChar[i] = '\0';
+  }
 }
 
-int main(int argc, char *argv[])
-{
-    int simpleSocket = 0;
-    int simplePort = 0;
-    int returnStatus = 0;
-    struct sockaddr_in simpleServer;
-
-    if (argc < 1 || argc > 2)
-    {
-        fprintf(stderr, "Usage: %s <port>\n", argv[0]);
-        exit(1);
+int main(int argc, char *argv[]) {
+  int simpleSocket = 0;
+  int simplePort = 0;
+  int returnStatus = 0;
+  struct sockaddr_in simpleServer;
+
+  if (argc < 1 || argc > 2) {
+    fprintf(stderr, "Usage: %s <port>\n", argv[0]);
+    exit(1);
+  }
+
+  simpleSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
+
+  if (simpleSocket == -1) {
+
+    fprintf(stderr, "Could not create a socket!\n");
+    exit(1);
+  } else {
+    fprintf(stderr, "Socket created!\n");
+  }
+
+  /* retrieve the port number for listening */
+  if (argc == 2) {
+    simplePort = atoi(argv[1]);
+    if (simplePort < 10000 || simplePort > 12000) {
+      fprintf(stderr, "Port must be in range [10000, 12000]\n");
+      exit(1);
     }
+  } else {
+    srand(time(NULL));
+    simplePort = (rand() % 1999) + 10000;
+  }
+
+  /* setup the address structure */
+  /* use INADDR_ANY to bind to all local addresses  */
+  memset(&simpleServer, '\0', sizeof(simpleServer));
+  simpleServer.sin_family = AF_INET;
+  simpleServer.sin_addr.s_addr = htonl(INADDR_ANY);
+  simpleServer.sin_port = htons(simplePort);
+
+  /*  bind to the address and port with our socket */
+  returnStatus = bind(simpleSocket, (struct sockaddr *)&simpleServer,
+                      sizeof(simpleServer));
+
+  if (returnStatus == 0) {
+    fprintf(stderr, "Bind completed on port %d!\n", simplePort);
+  } else {
+    fprintf(stderr, "Could not bind to address!\n");
+    close(simpleSocket);
+    exit(1);
+  }
 
-    simpleSocket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP);
-
-    if (simpleSocket == -1)
-    {
+  /* lets listen on the socket for connections      */
+  returnStatus = listen(simpleSocket, 5);
 
-        fprintf(stderr, "Could not create a socket!\n");
-        exit(1);
-    }
-    else
-    {
-        fprintf(stderr, "Socket created!\n");
-    }
-
-    /* retrieve the port number for listening */
-    if (argc == 2)
-    {
-        simplePort = atoi(argv[1]);
-        if (simplePort < 10000 || simplePort > 12000)
-        {
-            fprintf(stderr, "Port must be in range [10000, 12000]\n");
-            exit(1);
-        }
-    }
-    else
-    {
-        srand(time(NULL));
-        simplePort = (rand() % 1999) + 10000;
+  if (returnStatus == -1) {
+    fprintf(stderr, "Cannot listen on socket!\n");
+    close(simpleSocket);
+    exit(1);
+  }
+
+  struct sockaddr_in clientName = {0};
+  int simpleChildSocket = 0;
+  int clientNameLength = sizeof(clientName);
+
+  /* wait here */
+  while (1) {
+    simpleChildSocket =
+        accept(simpleSocket, (struct sockaddr *)&clientName, &clientNameLength);
+
+    if (simpleChildSocket == -1) {
+      fprintf(stderr, "Cannot accept connections!\n");
+      close(simpleSocket);
+      exit(1);
     }
 
-    /* setup the address structure */
-    /* use INADDR_ANY to bind to all local addresses  */
-    memset(&simpleServer, '\0', sizeof(simpleServer));
-    simpleServer.sin_family = AF_INET;
-    simpleServer.sin_addr.s_addr = htonl(INADDR_ANY);
-    simpleServer.sin_port = htons(simplePort);
-
-    /*  bind to the address and port with our socket */
-    returnStatus = bind(simpleSocket, (struct sockaddr *)&simpleServer,
-                        sizeof(simpleServer));
-
-    if (returnStatus == 0)
-    {
-        fprintf(stderr, "Bind completed on port %d!\n", simplePort);
-    }
-    else
-    {
-        fprintf(stderr, "Could not bind to address!\n");
-        close(simpleSocket);
-        exit(1);
+    char bufferRead[256] = {'\0'};
+    read(simpleChildSocket, bufferRead, sizeof(bufferRead));
+    printf("Num Iterazioni: %s\n", bufferRead);
+    int iterations = atoi(bufferRead);
+
+    // Send ACK
+    char bufferWrite[256] = {'\0'};
+    snprintf(bufferWrite, sizeof(bufferWrite), "ACK");
+    write(simpleChildSocket, bufferWrite, sizeof(bufferWrite));
+
+    for (int i = 0; i < iterations; ++i) {
+      clean_buffer((void *)bufferRead, sizeof(bufferRead));
+      clean_buffer((void *)bufferWrite, sizeof(bufferWrite));
+
+      char bufferRead[256] = {'\0'};
+      // Read message from client
+      read(simpleChildSocket, bufferRead, sizeof(bufferRead));
+      printf("\tReceived: %s\n", bufferRead);
+      char bufferWrite[256] = {'\0'};
+      snprintf(bufferWrite, sizeof(bufferWrite), "%s", bufferRead);
+      write(simpleChildSocket, bufferWrite, sizeof(bufferWrite));
     }
 
-    /* lets listen on the socket for connections      */
-    returnStatus = listen(simpleSocket, 5);
+    // Wait for BYE
+    clean_buffer((void *)bufferRead, sizeof(bufferRead));
+    read(simpleChildSocket, bufferRead, sizeof(bufferRead));
 
-    if (returnStatus == -1)
-    {
-        fprintf(stderr, "Cannot listen on socket!\n");
-        close(simpleSocket);
-        exit(1);
-    }
+    printf("%s\n", bufferRead);
 
-    struct sockaddr_in clientName = {0};
-    int simpleChildSocket = 0;
-    int clientNameLength = sizeof(clientName);
-
-    /* wait here */
-    while(1){
-        simpleChildSocket =
-            accept(simpleSocket, (struct sockaddr *)&clientName, &clientNameLength);
-
-        if (simpleChildSocket == -1)
-        {
-            fprintf(stderr, "Cannot accept connections!\n");
-            close(simpleSocket);
-            exit(1);
-        }
-
-        char bufferRead[256] = {'\0'};
-        read(simpleChildSocket, bufferRead, sizeof(bufferRead));
-        printf("Num Iterazioni: %s\n", bufferRead);
-        int iterations = atoi(bufferRead);
-
-        //Send ACK
-        char bufferWrite[256] = {'\0'};
-        snprintf(bufferWrite, sizeof(bufferWrite), "ACK");
-        write(simpleChildSocket, bufferWrite, sizeof(bufferWrite));
-
-
-        for (int i = 0; i < iterations; ++i)
-        {
-            clean_buffer((void *) bufferRead, sizeof(bufferRead));
-            clean_buffer((void *) bufferWrite, sizeof(bufferWrite));
-
-            char bufferRead[256] = {'\0'};
-            // Read message from client
-            read(simpleChildSocket, bufferRead, sizeof(bufferRead));
-            printf("\tReceived: %s\n", bufferRead);
-            char bufferWrite[256] = {'\0'};
-            snprintf(bufferWrite, sizeof(bufferWrite), "%s", bufferRead);
-            write(simpleChildSocket, bufferWrite, sizeof(bufferWrite));
-        }
-        close(simpleChildSocket);
-        }
-    close(simpleSocket);
-    return 0;
+    close(simpleChildSocket);
+  }
+  close(simpleSocket);
+  return 0;
 }
-- 
GitLab