diff --git a/client b/client deleted file mode 100755 index 545f789..0000000 Binary files a/client and /dev/null differ diff --git a/client.c b/client.c index 1d9311f..6532db9 100644 --- a/client.c +++ b/client.c @@ -7,17 +7,24 @@ #include #include +#define N 10000 #define TRUE 1 #define FALSE 0 #define HOST_IP "127.0.0.1" // IPV4 loopback address -#define SERVER_PORT 8294 // Server port +#define SERVER_PORT 8099 // Server port #define PORT_USED_CODE 256 #define SOCKET_ERROR_CODE -1 // Socket create, Connection server, Receive buffer to server code error #define SYSTEM_EXIT_FAILED 1 // Operating System program error response #define SYSTEM_EXIT_SUCCESS 0 // Operating System program success response + #define KB 1024 +float times[N]; + +float send_elapsed_time_ms = 0.00; +float receive_elapsed_time_ms = 0.00; + typedef struct sockaddr_in socket_address; int init_socket() @@ -32,6 +39,8 @@ int init_socket() perror("Socket create failed!\n"); exit(SYSTEM_EXIT_FAILED); } + + return client_socket; } socket_address config_server_address() @@ -45,7 +54,6 @@ socket_address config_server_address() return server_address; } - void connect_to_server(int client_socket, socket_address server_address) { struct sockaddr* address = (struct sockaddr*)&server_address; @@ -60,65 +68,23 @@ void connect_to_server(int client_socket, socket_address server_address) perror("Server connection error\n"); close(client_socket); exit(SYSTEM_EXIT_FAILED); - }{ - printf("Server connection successfully\n\n"); } } -int is_server_down() -{ - char* full_command = (char*)malloc(1000*sizeof(char)); - - char* base_command = "lsof -i 4@"; - char str[5]; - sprintf(str, "%d", SERVER_PORT); - - strcat(full_command, base_command); - strcat(full_command,HOST_IP); - strcat(full_command, " -i:"); - strcat(full_command, str); - strcat(full_command, " >/dev/null 2>&1"); - - system(full_command) == PORT_USED_CODE ? FALSE : TRUE; -} - - int receive_buffer(int client_socket, int buffer_size) { - int bytes_read; + ssize_t bytes_read; - char received_buffer[buffer_size]; + int received_buffer[buffer_size]; - printf("[CLIENT] - Receiving [PONG]\n"); + recv(client_socket, received_buffer, buffer_size, 0); - while((bytes_read = recv(client_socket, received_buffer, buffer_size, 0)) > 0) - { - - received_buffer[bytes_read] = '\0'; - - printf("VALUE RECEIVED [ %s ]", received_buffer); - - printf("\n[CLIENT] - Server message received successfully!"); - - return 0; - } - return 1; } -void send_buffer(int client_socket, char sended_buffer[], int buffer_size) -{ - - float size_in_kb = ((float)buffer_size/(float)KB); - - if(buffer_size >= KB){ - printf("[CLIENT] - Sending [PING] %dKB\n\n", (buffer_size/KB)); - }else{ - printf("[CLIENT] - Sending [PING] %fKB\n\n", ((float)buffer_size/(float)KB)); - } - - send(client_socket, sended_buffer, buffer_size, 0); - +void send_buffer(int client_socket, int buffer[], size_t buffer_size) +{ + send(client_socket, buffer, buffer_size, 0); } void controlc_handler() @@ -127,7 +93,7 @@ void controlc_handler() exit(SYSTEM_EXIT_SUCCESS); } -void socket_listen(int client_socket, char sended_buffer[], int buffer_size) +void socket_listen(int client_socket, int buffer[], size_t buffer_size) { if(signal(SIGINT, controlc_handler) == SIG_ERR) @@ -136,45 +102,62 @@ void socket_listen(int client_socket, char sended_buffer[], int buffer_size) exit(SYSTEM_EXIT_FAILED); } - while(TRUE){ - send_buffer(client_socket, sended_buffer, buffer_size); - receive_buffer(client_socket, buffer_size); - } + clock_t start_send_time = clock(); + send_buffer(client_socket, buffer, buffer_size); + clock_t end_send_time = clock(); + + clock_t send_difference = (end_send_time - start_send_time); + send_elapsed_time_ms = ((float)send_difference / (CLOCKS_PER_SEC/1000)); + + clock_t start_receive_time = clock(); + receive_buffer(client_socket, buffer_size); + clock_t end_receive_time = clock(); + + clock_t receive_difference = (end_receive_time - start_receive_time); + receive_elapsed_time_ms = ((float)receive_difference / (CLOCKS_PER_SEC/1000)); } +float calculate() +{ + + float average_total = 0.00; + + for(int i = 0; i < N; i++){ + average_total += times[i]; + } + + return average_total; +} + + int main(int argc, char** argv) { - int buffer_size = (int)atoi(argv[1]); + size_t buffer_size = (int)atoi(argv[1]); - char sended_buffer[buffer_size]; + int buffer[buffer_size]; for(int i = 0; i < buffer_size; i++) { - sended_buffer[i] = '0'; + buffer[i] = (int)(i % 255); } - + int client_socket = init_socket(); socket_address server_address; server_address = config_server_address(); - printf("\n==================================================================\n"); - printf(" PING PONG PROGRAM \n"); - printf("==================================================================\n\n"); - connect_to_server(client_socket, server_address); - clock_t start = clock(); - socket_listen(client_socket, sended_buffer, buffer_size); - clock_t end = clock(); - - double elapsed_time_ms = (double)(end - start) * 1000.0 / CLOCKS_PER_SEC; - - printf("\nTime: %.2f ms\n\n", elapsed_time_ms); - - printf("==================================================================\n"); + for(int i = 0; i < N; i++){ + socket_listen(client_socket, buffer, buffer_size); + times[i] = send_elapsed_time_ms + receive_elapsed_time_ms; + } + float average = calculate(); + + printf("%lf\n", (float)(average/(float)N)); + return SYSTEM_EXIT_SUCCESS; } \ No newline at end of file diff --git a/graphic.py b/graphic.py index dd3a1da..70627e8 100644 --- a/graphic.py +++ b/graphic.py @@ -1,7 +1,71 @@ +import os +from decimal import Decimal, getcontext import matplotlib.pyplot as plt +valores = [] + +getcontext().prec = 50 + +def rm_files(): + for i in range(1,9): + os.system(f"rm -r time_file{i} >/dev/null 2>&1") + +def get_time(filename): + + f = open(f"{filename}", "r") + + try: + return Decimal(str(f.read())) + + except Exception: + print("[ERRO] A porta está em uso!") + exit(1) + +rm_files() + +os.system('make run_server buffer_size=64 >/dev/null 2>&1') +os.system('make run_client buffer_size=64 > time_file1') +os.system('sudo kill -9 $(sudo lsof -t -i:8099) >/dev/null 2>&1') +valores.append(get_time("time_file1")) + +os.system('make run_server buffer_size=128 >/dev/null 2>&1') +os.system('make run_client buffer_size=128 > time_file2') +os.system('sudo kill -9 $(sudo lsof -t -i:8099) >/dev/null 2>&1') +valores.append(get_time("time_file2")) + +os.system('make run_server buffer_size=256 >/dev/null 2>&1') +os.system('make run_client buffer_size=256 > time_file3') +os.system('sudo kill -9 $(sudo lsof -t -i:8099) >/dev/null 2>&1') +valores.append(get_time("time_file3")) + +os.system('make run_server buffer_size=512 >/dev/null 2>&1') +os.system('make run_client buffer_size=512 > time_file4') +os.system('sudo kill -9 $(sudo lsof -t -i:8099) >/dev/null 2>&1') +valores.append(get_time("time_file4")) + +os.system('make run_server buffer_size=1024 >/dev/null 2>&1') +os.system('make run_client buffer_size=1024 > time_file5') +os.system('sudo kill -9 $(sudo lsof -t -i:8099) >/dev/null 2>&1') +valores.append(get_time("time_file5")) + +os.system('make run_server buffer_size=2048 >/dev/null 2>&1') +os.system('make run_client buffer_size=2048 > time_file6') +os.system('sudo kill -9 $(sudo lsof -t -i:8099) >/dev/null 2>&1') +valores.append(get_time("time_file6")) + +os.system('make run_server buffer_size=4096 >/dev/null 2>&1') +os.system('make run_client buffer_size=4096 > time_file7') +os.system('sudo kill -9 $(sudo lsof -t -i:8099) >/dev/null 2>&1') +valores.append(get_time("time_file7")) + +os.system('make run_server buffer_size=8192 >/dev/null 2>&1') +os.system('make run_client buffer_size=8192 > time_file8') +os.system('sudo kill -9 $(sudo lsof -t -i:8099) >/dev/null 2>&1') +valores.append(get_time("time_file8")) + +rm_files() + categorias = ["0,064KB","0,128KB","0,256KB","0,512KB","1KB","2KB","4KB","8KB"] -valores = [0.13,0.11,0.13,0.12,0.13,0.13,0.13,0.14] plt.bar(categorias, valores, color='purple', width=0.8) diff --git a/makefile b/makefile index 98cb24b..e5ff3d8 100644 --- a/makefile +++ b/makefile @@ -12,7 +12,11 @@ clean: run_client: @$(CC) client.c -o client @./client $(buffer_size) + @rm server client run_server: @$(CC) server.c -o server - @./server $(buffer_size) \ No newline at end of file + @./server $(buffer_size)& + +graphic: + @python graphic.py \ No newline at end of file diff --git a/server b/server deleted file mode 100755 index 3987619..0000000 Binary files a/server and /dev/null differ diff --git a/server.c b/server.c index 350e64b..0b215b9 100644 --- a/server.c +++ b/server.c @@ -9,11 +9,12 @@ #define FALSE 0 #define TRUE 1 #define HOST_IP "127.0.0.1" // IPV4 loopback address -#define SERVER_PORT 8294 // Server port -#define MAX_CONNECTIONS 2 // Num max client connected simultaneously +#define SERVER_PORT 8099 // Server port +#define MAX_CONNECTIONS 10 // Num max client connected simultaneously #define SOCKET_ERROR_CODE -1 // Socket create, Connection server, Receive buffer to server code error #define SYSTEM_EXIT_FAILED 1 // Operating System program error response #define SYSTEM_EXIT_SUCCESS 0 // Operating System program success response +#define KB 1024 typedef struct sockaddr_in socket_address; @@ -43,10 +44,10 @@ socket_address config_server_address() return server_address; } -void bind_server(int server_socket, socket_address server_address, int buffer_size) +void bind_server(int server_socket, socket_address server_address) { - struct sockaddr *address = (struct sockaddr*)&server_address; + struct sockaddr* address = (struct sockaddr*)&server_address; int server_bind_response = bind(server_socket, address, sizeof(server_address)); @@ -70,37 +71,29 @@ int accept_connection(int client_socket, int server_socket, socket_address clien exit(SYSTEM_EXIT_FAILED); }else{ - printf("[SERVER] - Client connected: %s:%d\n", inet_ntoa(client_address.sin_addr), ntohs(client_address.sin_port)); return client_socket; } } -void send_buffer(int client_socket, char buffer[], char buffer_size) +void send_buffer(int client_socket, int buffer[], int buffer_size) { - printf("\n[SERVER] - Sending [PONG]\n"); send(client_socket, buffer, buffer_size, 0); } -int receive_buffer(int client_socket, char buffer[], int buffer_size) +int receive_buffer(int client_socket, int buffer_size) { - int bytes_read; + ssize_t bytes_read; - char received_buffer[buffer_size]; - - printf("[SERVER] - Receiving [PING]\n"); + int received_buffer[buffer_size]; while((bytes_read = recv(client_socket, received_buffer, buffer_size, 0)) > 0) { received_buffer[bytes_read] = '\0'; - printf("VALUE RECEIVED [ %s ]", received_buffer); - - printf("\n[SERVER] - Client message received successfully!"); - send_buffer(client_socket, received_buffer, buffer_size); } } @@ -112,7 +105,7 @@ void controlc_handler() } -void server_listen(int client_socket, int server_socket, socket_address client_address, socklen_t client_addr_len, char buffer[], int buffer_size) +void server_listen(int client_socket, int server_socket, socket_address client_address, socklen_t client_addr_len, int buffer_size) { if (listen(server_socket, MAX_CONNECTIONS) == SOCKET_ERROR_CODE) @@ -124,30 +117,15 @@ void server_listen(int client_socket, int server_socket, socket_address client_a printf("[SERVER] - Server TCP listening on port %d...\n", SERVER_PORT); - //if(signal(SIGINT, controlc_handler) == SIG_ERR) - //{ - // perror("Signal create error!"); - // exit(SYSTEM_EXIT_FAILED); - //} - - char received_buffer[buffer_size]; - - - while(TRUE) - { - client_socket = accept_connection(client_socket, server_socket, client_address, client_addr_len); - - receive_buffer(client_socket, buffer, buffer_size); - } - + client_socket = accept_connection(client_socket, server_socket, client_address, client_addr_len); + receive_buffer(client_socket, buffer_size); } int main(int argc, char** argv) { - int buffer_size = (int)atoi(argv[1]); - - char buffer[buffer_size]; + size_t buffer_size = 8192; + int buffer[buffer_size]; int server_socket, client_socket; @@ -158,7 +136,7 @@ int main(int argc, char** argv) server_address = config_server_address(); - bind_server(server_socket, server_address, buffer_size); + bind_server(server_socket, server_address); - server_listen(client_socket, server_socket, client_address, client_addr_len, buffer, buffer_size); + server_listen(client_socket, server_socket, client_address, client_addr_len, buffer_size); }