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