diff --git a/Reti/Laboratorio/Assigment5/Calculator/client b/Reti/Laboratorio/Assigment5/Calculator/client
index 9370d342872f7b132d6304237f6d97e5426ea6a7..c4ff7f692ae0b5232f9826502fb0731db98b29f6 100755
Binary files a/Reti/Laboratorio/Assigment5/Calculator/client and b/Reti/Laboratorio/Assigment5/Calculator/client differ
diff --git a/Reti/Laboratorio/Assigment5/Calculator/client.c b/Reti/Laboratorio/Assigment5/Calculator/client.c
index 02a6abfc6cbf1749609115b9c5269187ea4fb8c7..6a7bff6226b2345481d918c23c47d037aba359ef 100644
--- a/Reti/Laboratorio/Assigment5/Calculator/client.c
+++ b/Reti/Laboratorio/Assigment5/Calculator/client.c
@@ -97,9 +97,11 @@ int main(int argc, char *argv[]) {
     printf("Inserire il valore da voler inviare al server con il formato num "
            "num operator: ");
     scanf("%d %d %c", &num1, &num2, &operator);
-    if (valueToSend[0] == '\0') {
-      fprintf(stderr, "Impossibile inviare una riga vuota!");
+    if (num2 == 0 && operator== '/') {
+      fprintf(stderr, "Impossibile dividere per zero!");
     } else {
+      snprintf(valueToSend, sizeof(valueToSend), "%d %d %c", num1,
+               num2, operator);
       write(simpleSocket, valueToSend, strlen(valueToSend));
       read(simpleSocket, valueToReceive, sizeof(valueToReceive));
       printf("\n\nEcho: %s\n", valueToReceive);
diff --git a/Reti/Laboratorio/Assigment5/Calculator/server b/Reti/Laboratorio/Assigment5/Calculator/server
index ca77de42d76d51f4fb7d79f062bba3f5669284ca..a7cf889c46686a1c9befaca3fb4f851061b36c20 100755
Binary files a/Reti/Laboratorio/Assigment5/Calculator/server and b/Reti/Laboratorio/Assigment5/Calculator/server differ
diff --git a/Reti/Laboratorio/Assigment5/Calculator/server.c b/Reti/Laboratorio/Assigment5/Calculator/server.c
index 01e11ec1e8e9cb092b4c25b0178d1ce46f51ab5e..f3ed8725f568a1d0d6aeeb91a89d21af782b8348 100644
--- a/Reti/Laboratorio/Assigment5/Calculator/server.c
+++ b/Reti/Laboratorio/Assigment5/Calculator/server.c
@@ -101,9 +101,35 @@ int main(int argc, char *argv[]) {
       memset(valueToRead, '\0', sizeof(valueToRead));
       memset(valueToSend, '\0', sizeof(valueToSend));
 
+      int num1;
+      int num2;
+      char operator;
+      float result;
+
       // Leggo il valore ricevuto dal client e gli restituisco la lunghezza
       read(simpleChildSocket, valueToRead, sizeof(valueToRead));
-      snprintf(valueToSend, sizeof(valueToSend), "%zu", strlen(valueToRead));
+      sscanf(valueToRead, "%d %d %c", &num1, &num2, &operator);
+      printf("%d %d %c\n", num1, num2, operator);
+
+      switch (operator) {
+      case '+':
+        result = num1 + num2;
+        break;
+      case '-':
+        result = num1 - num2;
+        break;
+      case '/':
+        result = (float)num1 / (float)num2;
+        break;
+      case '*':
+        result = num1 * num2;
+        break;
+      default:
+        fprintf(stderr, "Errore, operatore non valido");
+        exit(1);
+      }
+
+      snprintf(valueToSend, sizeof(valueToSend), "%f", result);
       write(simpleChildSocket, valueToSend, sizeof(valueToSend));
     }