From 7383e95a8e5585dcf49cb7492529376ed28d92ec Mon Sep 17 00:00:00 2001 From: Vinicius Silva Date: Mon, 4 Sep 2023 21:20:42 -0300 Subject: [PATCH] Init commit --- .vscode/settings.json | 6 ++ README.md | 7 +- client | Bin 0 -> 17240 bytes client.c | 170 ++++++++++++++++++++++++++++++++++++++++++ server | Bin 0 -> 17104 bytes server.c | 154 ++++++++++++++++++++++++++++++++++++++ 6 files changed, 336 insertions(+), 1 deletion(-) create mode 100644 .vscode/settings.json create mode 100755 client create mode 100644 client.c create mode 100755 server create mode 100644 server.c diff --git a/.vscode/settings.json b/.vscode/settings.json new file mode 100644 index 0000000..a0aef3b --- /dev/null +++ b/.vscode/settings.json @@ -0,0 +1,6 @@ +{ + "files.associations": { + "unistd.h": "c", + "stdio.h": "c" + } +} \ No newline at end of file diff --git a/README.md b/README.md index dfd3afd..496c079 100644 --- a/README.md +++ b/README.md @@ -1 +1,6 @@ -# pingpong \ No newline at end of file +# pingpong + + +* Establish a simple socket connection between a client and a server using the TCP protocol. + + \ No newline at end of file diff --git a/client b/client new file mode 100755 index 0000000000000000000000000000000000000000..fa20f624a3f6826baa535a1dd3432725d99e9d6b GIT binary patch literal 17240 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 +#include +#include +#include +#include +#include +#include +#include + + +#define TRUE 1 +#define FALSE 0 +#define HOST_IP "127.0.0.1" // IPV4 loopback address +#define SERVER_PORT 8077 // Server port +#define BUFFER_SIZE 8192 // Default size +#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 + + +char sended_buffer[BUFFER_SIZE]; + +typedef struct sockaddr_in socket_address; + +int init_socket() +{ + // AF_INET -> IPV4 Family + // SOCK_STREAM -> TCP Socket initialization + // IPPROTO_TCP -> TCP Explicit protocol + int client_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + + if(client_socket == SOCKET_ERROR_CODE) + { + perror("Socket create failed!\n"); + exit(SYSTEM_EXIT_FAILED); + } +} + +socket_address config_server_address() +{ + socket_address server_address; + + server_address.sin_family = AF_INET; // IPV4 ips family + server_address.sin_port = htons(SERVER_PORT); + server_address.sin_addr.s_addr = inet_addr(HOST_IP); + + return server_address; +} + + +void connect_to_server(int client_socket, socket_address server_address) +{ + struct sockaddr* address = (struct sockaddr*)&server_address; + + int connection_response = connect(client_socket, + address, + sizeof(server_address) + ); + + if(connection_response == SOCKET_ERROR_CODE) + { + perror("Server connection error\n"); + close(client_socket); + exit(SYSTEM_EXIT_FAILED); + }{ + printf("Server connection successfully\n\n"); + } +} + +void init_buffer() +{ + memset(&sended_buffer, '0', BUFFER_SIZE); +} + +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) +{ + if(!is_server_down()) + { + char received_buffer[BUFFER_SIZE]; // Buffer will be send by server to client + int bytes_read = recv(client_socket, received_buffer, sizeof(received_buffer), 0); + + if(bytes_read == SOCKET_ERROR_CODE) + { + perror("Receive server message error!"); + + }else + { + received_buffer[bytes_read] = '\0'; // Buffer string finalized with '\0', + printf("Receiving [PONG] %f KB\n", ((float)BUFFER_SIZE/(float)1024)); + printf("\nServer message received successfully!\n"); + } + }else{ + printf("Server is down!"); + exit(SYSTEM_EXIT_SUCCESS); + } +} + +void send_buffer(int client_socket) +{ + clock_t init_time, end_time, total_time; + init_buffer(sended_buffer); + + + printf("Sending [PING] %f KB\n", ((float)BUFFER_SIZE/(float)1024)); + + + + send(client_socket, sended_buffer, strlen(sended_buffer), 0); + receive_buffer(client_socket); + +} + +void controlc_handler() +{ + printf("\nProgram finished!\n"); + exit(SYSTEM_EXIT_SUCCESS); +} + +void socket_listen(int client_socket) +{ + + if(signal(SIGINT, controlc_handler) == SIG_ERR) + { + perror("Signal create error!"); + exit(SYSTEM_EXIT_FAILED); + } + + send_buffer(client_socket); + +} + +int main(void) +{ + + int client_socket = init_socket(); + + socket_address server_address; + server_address = config_server_address(); + + connect_to_server(client_socket, server_address); + + clock_t start = clock(); + socket_listen(client_socket); + clock_t end = clock(); + + double elapsed_time_ms = (double)(end - start) * 1000.0 / CLOCKS_PER_SEC; + + printf("Time: %.2f ms\n", elapsed_time_ms); + + + return SYSTEM_EXIT_SUCCESS; +} \ No newline at end of file diff --git a/server b/server new file mode 100755 index 0000000000000000000000000000000000000000..c12b2d3ee3aa3ac0e2a1c2318b3d8a17676f62e9 GIT binary patch literal 17104 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 +#include +#include +#include +#include +#include +#include + +#define TRUE 1 +#define HOST_IP "127.0.0.1" // IPV4 loopback address +#define SERVER_PORT 8077 // Server port +#define BUFFER_SIZE 8192 // Default size (64bytes) to (8Kbytes) +#define MAX_CONNECTIONS 2 // 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 + +typedef struct sockaddr_in socket_address; + +char buffer[BUFFER_SIZE]; + +int create_socket() +{ + int server_socket; + + server_socket = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP); + + if(server_socket == SOCKET_ERROR_CODE) + { + perror("Socket create failed!"); + exit(SYSTEM_EXIT_FAILED); + } + + return server_socket; +} + +socket_address config_server_address() +{ + socket_address server_address; + + server_address.sin_family = AF_INET; // IPV4 ips family + server_address.sin_port = htons(SERVER_PORT); + server_address.sin_addr.s_addr = inet_addr(HOST_IP); + + return server_address; +} + +void bind_server(int server_socket, socket_address server_address) +{ + + struct sockaddr *address = (struct sockaddr*)&server_address; + + int server_bind_response = bind(server_socket, address, sizeof(server_address)); + + if(server_bind_response == SOCKET_ERROR_CODE) + { + perror("Bind server error"); + close(server_socket); + exit(SYSTEM_EXIT_FAILED); + } +} + +int accept_connection(int client_socket, int server_socket, socket_address client_address, socklen_t client_addr_len) +{ + struct sockaddr *address = (struct sockaddr*)&client_address; + + client_socket = accept(server_socket, address, &client_addr_len); + + if(client_socket == SYSTEM_EXIT_FAILED) + { + perror("Accept connection error!"); + exit(SYSTEM_EXIT_FAILED); + + }else{ + printf("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) +{ + + printf("Sending [PONG]\n"); + send(client_socket, buffer, strlen(buffer), 0); +} + + +void receive_buffer(int client_socket) +{ + int bytes_read; + + printf("Receiving [PING]\n"); + + while((bytes_read = recv(client_socket, buffer, sizeof(buffer), 0)) > 0) + { + buffer[bytes_read] = '\0'; + printf("Client message received successfully!\n"); + + send_buffer(client_socket); + } + + +} + +void controlc_handler() +{ + printf("\nProgram finished!\n"); + exit(SYSTEM_EXIT_SUCCESS); +} + + +void server_listen(int client_socket, int server_socket, socket_address client_address, socklen_t client_addr_len) +{ + + if (listen(server_socket, MAX_CONNECTIONS) == SOCKET_ERROR_CODE) + { + perror("Listening mode error"); + close(server_socket); + exit(SYSTEM_EXIT_FAILED); + } + + printf("Server TCP listening on port %d...\n", SERVER_PORT); + + if(signal(SIGINT, controlc_handler) == SIG_ERR) + { + perror("Signal create error!"); + exit(SYSTEM_EXIT_FAILED); + } + + while(TRUE) + { + client_socket = accept_connection(client_socket, server_socket, client_address, client_addr_len); + + receive_buffer(client_socket); + } + +} + +int main(void) +{ + int server_socket, client_socket; + + server_socket = create_socket(); + + socket_address server_address, client_address; + socklen_t client_addr_len = sizeof(client_address); + + server_address = config_server_address(); + + bind_server(server_socket, server_address); + + server_listen(client_socket, server_socket, client_address, client_addr_len); +}