From d504db5277cd29ae3e15b1ae1dcaa08b7c5f7425 Mon Sep 17 00:00:00 2001
From: Gianluca <gianlucamastrolonardo10@gmail.com>
Date: Thu, 23 May 2024 19:15:34 +0200
Subject: [PATCH] CharCount finito

---
 .../Laboratorio/Assigment4/EchoServer3/client | Bin 17544 -> 16792 bytes
 .../Laboratorio/Assigment4/EchoServer3/server | Bin 17544 -> 16792 bytes
 Reti/Laboratorio/Assigment5/CharCount/client  | Bin 0 -> 16800 bytes
 .../Laboratorio/Assigment5/CharCount/client.c |  64 +++++++++++++++---
 Reti/Laboratorio/Assigment5/CharCount/server  | Bin 0 -> 16840 bytes
 .../Laboratorio/Assigment5/CharCount/server.c |  58 ++++++++++++----
 6 files changed, 98 insertions(+), 24 deletions(-)
 create mode 100755 Reti/Laboratorio/Assigment5/CharCount/client
 create mode 100755 Reti/Laboratorio/Assigment5/CharCount/server

diff --git a/Reti/Laboratorio/Assigment4/EchoServer3/client b/Reti/Laboratorio/Assigment4/EchoServer3/client
index 403f505de9e95754c50e52be97844733e1792cca..79c33a6ff77aeb77a2fd5b3c6b7d48dc45ecb447 100755
GIT binary patch
delta 3285
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

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

diff --git a/Reti/Laboratorio/Assigment4/EchoServer3/server b/Reti/Laboratorio/Assigment4/EchoServer3/server
index 4afb8b029004ffe5be2eea8030e5f58cf9ce9552..086f75bdbd06ddcfd9172601c599b9579fc4e5f8 100755
GIT binary patch
delta 3322
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
HO>6%TS}M@j

delta 4139
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
V)%g)r+RIblSt9jjQ>dz%^FLKkEHeNA

diff --git a/Reti/Laboratorio/Assigment5/CharCount/client b/Reti/Laboratorio/Assigment5/CharCount/client
new file mode 100755
index 0000000000000000000000000000000000000000..9370d342872f7b132d6304237f6d97e5426ea6a7
GIT binary patch
literal 16800
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
Jd=5U5{Wp0BX?6er

literal 0
HcmV?d00001

diff --git a/Reti/Laboratorio/Assigment5/CharCount/client.c b/Reti/Laboratorio/Assigment5/CharCount/client.c
index 9d8522a..22eacc1 100644
--- a/Reti/Laboratorio/Assigment5/CharCount/client.c
+++ b/Reti/Laboratorio/Assigment5/CharCount/client.c
@@ -4,6 +4,7 @@
 #include <stdlib.h>
 #include <string.h>
 #include <sys/socket.h>
+#include <sys/time.h>
 #include <sys/types.h>
 #include <unistd.h>
 
@@ -13,8 +14,15 @@ int main(int argc, char *argv[]) {
   char iterationsServer[256] = {'\0'};
 
   int iterations;
+
+  struct timeval startTime, endTime;
+  double timeServ;
+
   printf("Inserire il numero di iterazioni: ");
   scanf("%d", &iterations);
+  if (!iterations) {
+    exit(1);
+  }
   snprintf(iterationsServer, sizeof(iterationsServer), "%d", iterations);
 
   int simpleSocket = 0;
@@ -55,7 +63,7 @@ int main(int argc, char *argv[]) {
                          sizeof(simpleServer));
 
   if (returnStatus == 0) {
-    fprintf(stderr, "Connect successful!\n");
+    printf("Connect successful!\n");
   } else {
     fprintf(stderr, "Could not connect to address!\n");
     close(simpleSocket);
@@ -63,21 +71,59 @@ int main(int argc, char *argv[]) {
   }
 
   // Inviando il numero di iterazioni al server
-  write(simpleSocket, iterationsServer, strlen(valueToSend));
+  write(simpleSocket, iterationsServer, strlen(iterationsServer));
 
-  for (int i = 0; i < iterations; ++i) {
+  // Avvio il timer
+  gettimeofday(&startTime, NULL);
 
-    /* get the message from the server   */
-    // returnStatus = read(simpleSocket, buffer, sizeof(buffer));
+  // Aspettando l'ACK
+  read(simpleSocket, valueToReceive, sizeof(valueToReceive));
+  if (strcmp(valueToReceive, "ACK") != 0) {
+    fprintf(stderr, "Invalid ACK");
+    exit(0);
+  }
+  printf("%s\n", valueToReceive);
+
+  int i = 0;
+  while (i < iterations) {
+    // Pulisco i buffer
+    memset(&valueToReceive, '\0', sizeof(valueToReceive));
+    memset(&valueToSend, '\0', sizeof(valueToSend));
 
     printf("Inserire il valore da voler inviare al server: ");
     scanf("%s", valueToSend);
-    write(simpleSocket, valueToSend, strlen(valueToSend));
-    read(simpleSocket, valueToReceive, sizeof(valueToReceive));
-    printf("\n\nEcho: %s\n", valueToReceive);
-    close(simpleSocket);
+    if (valueToSend[0] == '\0') {
+      fprintf(stderr, "Impossibile inviare una riga vuota!");
+    } else {
+      write(simpleSocket, valueToSend, strlen(valueToSend));
+      read(simpleSocket, valueToReceive, sizeof(valueToReceive));
+      printf("\n\nEcho: %s\n", valueToReceive);
+      ++i;
+    }
   }
 
+  // Invio il BYE
+  memset(&valueToSend, '\0', sizeof(valueToSend));
+  snprintf(valueToSend, sizeof(valueToSend), "BYE");
+  write(simpleSocket, valueToSend, sizeof(valueToSend));
+
+  // Aspettando l'ACK
+  read(simpleSocket, valueToReceive, sizeof(valueToReceive));
+  if (strcmp(valueToReceive, "ACK") != 0) {
+    fprintf(stderr, "Invalid ACK");
+    exit(0);
+  }
+  printf("%s\n", valueToReceive);
+
   close(simpleSocket);
+
+  // Spengo il timer
+  gettimeofday(&endTime, NULL);
+
+  timeServ = (endTime.tv_sec + (endTime.tv_usec / 1000000.0)) -
+             (startTime.tv_sec + (startTime.tv_usec / 1000000.0));
+
+  printf("Service Time: %.2f", timeServ);
+
   return 0;
 }
diff --git a/Reti/Laboratorio/Assigment5/CharCount/server b/Reti/Laboratorio/Assigment5/CharCount/server
new file mode 100755
index 0000000000000000000000000000000000000000..ca77de42d76d51f4fb7d79f062bba3f5669284ca
GIT binary patch
literal 16840
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

literal 0
HcmV?d00001

diff --git a/Reti/Laboratorio/Assigment5/CharCount/server.c b/Reti/Laboratorio/Assigment5/CharCount/server.c
index 6623e4f..01e11ec 100644
--- a/Reti/Laboratorio/Assigment5/CharCount/server.c
+++ b/Reti/Laboratorio/Assigment5/CharCount/server.c
@@ -74,25 +74,53 @@ int main(int argc, char *argv[]) {
   int clientNameLength = sizeof(clientName);
 
   /* wait here */
+  while (1) {
+    char valueToSend[256] = {'\0'};
+    char valueToRead[256] = {'\0'};
 
-  simpleChildSocket =
-      accept(simpleSocket, (struct sockaddr *)&clientName, &clientNameLength);
+    simpleChildSocket =
+        accept(simpleSocket, (struct sockaddr *)&clientName, &clientNameLength);
 
-  if (simpleChildSocket == -1) {
-    fprintf(stderr, "Cannot accept connections!\n");
-    close(simpleSocket);
-    exit(1);
-  }
+    if (simpleChildSocket == -1) {
+      fprintf(stderr, "Cannot accept connections!\n");
+      close(simpleSocket);
+      exit(1);
+    }
 
-  char bufferRead[256] = {'\0'};
-  read(simpleChildSocket, bufferRead, sizeof(bufferRead));
+    // Leggendo il numero di richieste da svolgere
+    read(simpleChildSocket, valueToRead, sizeof(valueToRead));
+    int iterations = atoi(valueToRead);
+    printf("Numero iterazioni: %d\n", iterations);
 
-  while (1) {
-    // Read message from client
-    read(simpleChildSocket, bufferRead, sizeof(bufferRead));
-    printf("Received: %s\n", bufferRead);
-    char valueToSend[256] = {'\0'};
-    snprintf(valueToSend, sizeof(valueToSend), "%s", bufferRead);
+    // Mando ACK al Client
+    snprintf(valueToSend, sizeof(valueToSend), "ACK");
+    write(simpleChildSocket, valueToSend, sizeof(valueToSend));
+
+    for (int i = 0; i < iterations; ++i) {
+      // Pulisco i buffer
+      memset(valueToRead, '\0', sizeof(valueToRead));
+      memset(valueToSend, '\0', sizeof(valueToSend));
+
+      // Leggo il valore ricevuto dal client e gli restituisco la lunghezza
+      read(simpleChildSocket, valueToRead, sizeof(valueToRead));
+      snprintf(valueToSend, sizeof(valueToSend), "%zu", strlen(valueToRead));
+      write(simpleChildSocket, valueToSend, sizeof(valueToSend));
+    }
+
+    memset(valueToRead, '\0', sizeof(valueToRead));
+    memset(valueToSend, '\0', sizeof(valueToSend));
+
+    // Aspetto il BYE dal client
+    read(simpleChildSocket, valueToRead, sizeof(valueToRead));
+
+    if (strcmp(valueToRead, "BYE") != 0) {
+      fprintf(stderr, "Invalid BYE\n");
+      exit(1);
+    }
+    printf("\tBYE RECEIVED\n");
+
+    // Invio ACK al Server
+    snprintf(valueToSend, sizeof(valueToSend), "ACK");
     write(simpleChildSocket, valueToSend, sizeof(valueToSend));
 
     close(simpleChildSocket);
-- 
GitLab