From 7e50c768dc3a22d74b14f069b9f04de366f4b38a Mon Sep 17 00:00:00 2001 From: Vinicius Silva Date: Wed, 29 Nov 2023 21:04:01 -0300 Subject: [PATCH] UDP UNIX DOMAIN and TCP socket implemented --- bin/client | Bin 17408 -> 17496 bytes bin/server | Bin 17536 -> 17536 bytes src/client.c | 24 +++++++++------- src/server.c | 78 +++++++++++++++++++++++++++------------------------ 4 files changed, 56 insertions(+), 46 deletions(-) diff --git a/bin/client b/bin/client index a7343ca0b5745f9aa18f9dd90eb18b147cb576d5..d3458fc5eeb0022de847fc7bf20a2cae64ef8a23 100755 GIT binary patch delta 5074 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 delta 4624 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 delta 4886 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 HRbBsIaXHHR diff --git a/src/client.c b/src/client.c index a701670..861e2d1 100644 --- a/src/client.c +++ b/src/client.c @@ -2,6 +2,7 @@ #include #include #include +#include #include #include #include @@ -32,6 +33,7 @@ typedef union socketaddr_t { socket_address_ipv4 socket_ipv4; socket_address_unix socket_unix; + } socketaddr_t; @@ -44,7 +46,8 @@ int domain, type, protocol; float elapsed_time_ms = 0.00; -int domain, type, protocol, sin_family, address, sock; +char* address; +int domain, type, protocol, sin_family, sock; typedef struct sockaddr_in socket_address; @@ -73,7 +76,7 @@ socketaddr_t config_server_address() { server_address.socket_ipv4.sin_family = sin_family; server_address.socket_ipv4.sin_port = htons(SERVER_PORT); - server_address.socket_ipv4.sin_addr.s_addr = address; + server_address.socket_ipv4.sin_addr.s_addr = inet_addr(address); }else{ @@ -90,8 +93,8 @@ void connect_to_server(int client_socket) struct sockaddr* address = socket_type == UNIX_SOCKET_FLAG ? (struct sockaddr*)&server_address.socket_unix : (struct sockaddr*)&server_address.socket_ipv4; int connection_response = connect(client_socket, - address, - socket_type == UNIX_SOCKET_FLAG ? (struct sockaddr*)&server_address.socket_unix : (struct sockaddr*)&server_address.socket_unix; + address, + socket_type == UNIX_SOCKET_FLAG ? (socklen_t)sizeof(server_address.socket_unix) : (socklen_t)sizeof(server_address.socket_ipv4) ); if(connection_response == SOCKET_ERROR_CODE) @@ -109,7 +112,7 @@ int receive_buffer(int client_socket, int buffer_size) if(socket_type == TCP_SOCKET_FLAG) recv(client_socket, received_buffer, buffer_size, 0); else { - struct sockaddr* address = socket_type == UNIX_SOCKET_FLAG ? (struct sockaddr*)&server_address.socket_unix : (struct sockaddr*)&server_address.socket_ipv4; + struct sockaddr* address = socket_type == UNIX_SOCKET_FLAG ? (struct sockaddr*)&server_address.socket_unix : (struct sockaddr*)&server_address.socket_ipv4; socklen_t* server_addr_size = socket_type == UNIX_SOCKET_FLAG ? (socklen_t*)sizeof(server_address.socket_unix) : (socklen_t*)sizeof(server_address.socket_ipv4); recvfrom(client_socket, received_buffer, buffer_size, 0, address, server_addr_size); } @@ -127,10 +130,11 @@ void send_buffer(int client_socket, int buffer[], size_t buffer_size) { printf("ENVIO %d\n", i); - socklen_t server_addr_size = (socklen_t)sizeof(server_address); + struct sockaddr* address = socket_type == UNIX_SOCKET_FLAG ? (struct sockaddr*)&server_address.socket_unix : (struct sockaddr*)&server_address.socket_ipv4; + socklen_t server_addr_size = socket_type == UNIX_SOCKET_FLAG ? (socklen_t)sizeof(server_address.socket_unix) : (socklen_t)sizeof(server_address.socket_ipv4); if(socket_type == TCP_SOCKET_FLAG) send(client_socket, buffer, buffer_size, 0); - else sendto(client_socket, buffer, buffer_size, 0, (const struct sockaddr *)&server_address, server_addr_size); + else sendto(client_socket, buffer, buffer_size, 0, address, server_addr_size); receive_buffer(client_socket, buffer_size); } @@ -165,7 +169,7 @@ void attribuite_socket_type(int socket_type) case TCP_SOCKET_FLAG: // TCP SOCKET sin_family = AF_INET; - address = inet_addr(HOST_IP); + address = HOST_IP; sock = SOCK_STREAM; break; @@ -173,7 +177,7 @@ void attribuite_socket_type(int socket_type) case UDP_SOCKET_FLAG: // UDP SOCKET sin_family = AF_INET; - address = INADDR_ANY; + address = HOST_IP; sock = SOCK_DGRAM; break; @@ -223,7 +227,7 @@ int main(int argc, char** argv) server_address = config_server_address(); - connect_to_server(client_socket, server_address); + connect_to_server(client_socket); socket_listen(client_socket, buffer, buffer_size); diff --git a/src/server.c b/src/server.c index b0a9e11..55d597a 100644 --- a/src/server.c +++ b/src/server.c @@ -20,19 +20,28 @@ #define UDP_SOCKET_FLAG 2 #define UNIX_SOCKET_FLAG 3 int num_of_read_bytes = 0; -typedef struct sockaddr_in socket_address; + +typedef struct sockaddr_in socket_address_ipv4; typedef struct sockaddr_un socket_address_unix; -socket_address client_address; + socklen_t client_addr_len; -socket_address server_address; -socket_address_unix server_address_unix; +typedef union socketaddr_t +{ + socket_address_ipv4 socket_ipv4; + socket_address_unix socket_unix; + +} socketaddr_t; + +socketaddr_t client_address; +socketaddr_t server_address; size_t buffer_size; int socket_type; -int domain, type, protocol, sin_family, address, sock; +char* address; +int domain, type, protocol, sin_family, sock; void panic(char* message) { @@ -54,34 +63,32 @@ int create_socket() return server_socket; } -socket_address config_server_address() +void config_server_address() { if(socket_type == UNIX_SOCKET_FLAG) { - socket_address server_address; - server_address.sin_family = sin_family; - server_address.sin_port = htons(SERVER_PORT); - server_address.sin_addr.s_addr = address; + server_address.socket_ipv4.sin_family = sin_family; + server_address.socket_ipv4.sin_port = htons(SERVER_PORT); + server_address.socket_ipv4.sin_addr.s_addr = inet_addr(address); }else{ - socket_address_unix server_address; - server_address.sun_family = AF_UNIX; - strcpy(server_address.sun_path, address); - unlink(address); + server_address.socket_unix.sun_family = AF_UNIX; + strcpy(server_address.socket_unix.sun_path, address); + unlink((const char*)address); } } -void bind_server(int server_socket, socket_address server_address) +void bind_server(int server_socket) { - struct sockaddr* address = (struct sockaddr*)&server_address; + struct sockaddr* address = socket_type == UNIX_SOCKET_FLAG ? (struct sockaddr*)&server_address.socket_unix : (struct sockaddr*)&server_address.socket_ipv4; - int server_bind_response = bind(server_socket, address, sizeof(server_address)); + int server_bind_response = bind(server_socket, address, socket_type == UNIX_SOCKET_FLAG ? sizeof(server_address.socket_unix) : sizeof(server_address.socket_ipv4)); - if (socket_type == UNIX_SOCKET_FLAG) unlink(address); + if (socket_type == UNIX_SOCKET_FLAG) unlink((const char*)address); if(server_bind_response == SOCKET_ERROR_CODE) { @@ -90,9 +97,10 @@ void bind_server(int server_socket, socket_address server_address) } } -int accept_connection(int client_socket, int server_socket, socket_address client_address, socklen_t client_addr_len) +int accept_connection(int client_socket, int server_socket) { - struct sockaddr *address = (struct sockaddr*)&client_address; + socklen_t client_addr_len = socket_type == UNIX_SOCKET_FLAG ? sizeof(client_address.socket_ipv4) : sizeof(client_address.socket_unix); + struct sockaddr *address = socket_type == UNIX_SOCKET_FLAG ? (struct sockaddr*)&client_address.socket_unix : (struct sockaddr*)&client_address.socket_ipv4; client_socket = accept(server_socket, address, &client_addr_len); @@ -106,24 +114,25 @@ int accept_connection(int client_socket, int server_socket, socket_address clien void send_buffer(int client_socket, int buffer[], int buffer_size) { - socklen_t client_addr_size = (socklen_t)sizeof(client_address); + socklen_t client_addr_len = socket_type == UNIX_SOCKET_FLAG ? sizeof(client_address.socket_ipv4) : sizeof(client_address.socket_unix); + struct sockaddr *address = socket_type == UNIX_SOCKET_FLAG ? (struct sockaddr*)&client_address.socket_unix : (struct sockaddr*)&client_address.socket_ipv4; if(socket_type == TCP_SOCKET_FLAG) send(client_socket, buffer, buffer_size, 0); - else sendto(client_socket, buffer, buffer_size, 0, (const struct sockaddr *)&client_address, client_addr_size); + else sendto(client_socket, buffer, buffer_size, 0, address, client_addr_len); } int receive_buffer(int client_socket, int buffer_size) { ssize_t bytes_read; - socklen_t* client_addr_size = (socklen_t*)sizeof(client_address); - + socklen_t* client_addr_len = socket_type == UNIX_SOCKET_FLAG ? (socklen_t *)sizeof(client_address.socket_ipv4) : (socklen_t *)sizeof(client_address.socket_unix); + struct sockaddr *address = socket_type == UNIX_SOCKET_FLAG ? (struct sockaddr*)&client_address.socket_unix : (struct sockaddr*)&client_address.socket_ipv4; int received_buffer[buffer_size]; for(int i = 0; i < num_of_read_bytes; i++) { - while((bytes_read = socket_type == UNIX_SOCKET_FLAG ? recv(client_socket, received_buffer, buffer_size, 0) : recvfrom(client_socket, received_buffer, buffer_size, 0, (struct sockaddr *)&client_address, client_addr_size)) > 0) + while((bytes_read = socket_type == UNIX_SOCKET_FLAG ? recv(client_socket, received_buffer, buffer_size, 0) : recvfrom(client_socket, received_buffer, buffer_size, 0, address, client_addr_len)) > 0) { send_buffer(client_socket, received_buffer, buffer_size); } @@ -136,7 +145,7 @@ void controlc_handler() exit(SYSTEM_EXIT_SUCCESS); } -void server_listen(int client_socket, int server_socket, socket_address client_address, socklen_t client_addr_len, int buffer_size) +void server_listen(int client_socket, int server_socket, int buffer_size) { if (listen(server_socket, MAX_CONNECTIONS) == SOCKET_ERROR_CODE) @@ -147,8 +156,8 @@ void server_listen(int client_socket, int server_socket, socket_address client_a } printf("[SERVER] - Server TCP listening on port %d...\n", SERVER_PORT); - - client_socket = accept_connection(client_socket, server_socket, client_address, client_addr_len); + + client_socket = accept_connection(client_socket, server_socket); receive_buffer(client_socket, buffer_size); } @@ -159,13 +168,13 @@ void attribuite_socket_type(int socket_type) case TCP_SOCKET_FLAG: // TCP SOCKET sin_family = AF_INET; - address = inet_addr(HOST_IP); + address = HOST_IP; sock = SOCK_STREAM; break; case UDP_SOCKET_FLAG: // UDP SOCKET - address = INADDR_ANY; + address = HOST_IP; sock = SOCK_DGRAM; break; @@ -209,14 +218,11 @@ int main(int argc, char** argv) server_socket = create_socket(); - socket_address server_address; - client_addr_len = sizeof(client_address); + config_server_address(); - server_address = config_server_address(); - - bind_server(server_socket, server_address); + bind_server(server_socket); - server_listen(client_socket, server_socket, client_address, client_addr_len, buffer_size); + server_listen(client_socket, server_socket, buffer_size); return SYSTEM_EXIT_SUCCESS; }