From 84357f34628f4f8d42a67d3cde87dc9dc51d4203 Mon Sep 17 00:00:00 2001 From: hulamy Date: Tue, 14 Feb 2023 09:39:48 +0100 Subject: [PATCH] test 02 --- a.out | Bin 89528 -> 16784 bytes mini_serv_02.c | 128 +++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 128 insertions(+) create mode 100644 mini_serv_02.c diff --git a/a.out b/a.out index 9bc6653499bd8d5440f53d9d2e702dab6a7a37ec..55034c7942df02bc199f92ee5349301cdae43c74 100755 GIT binary patch literal 16784 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 literal 89528 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 M4$4*`Th{Xb0bUo|0RR91 diff --git a/mini_serv_02.c b/mini_serv_02.c new file mode 100644 index 0000000..0e4d10e --- /dev/null +++ b/mini_serv_02.c @@ -0,0 +1,128 @@ +#include +#include +#include +#include +#include +#include + +#define BUFSIZE 160000 +#define MSGSIZE 1024 + +typedef struct s_client { + int id; + char msg[MSGSIZE]; +} t_client; + +void error(char *msg) { + write(1, msg, strlen(msg)); + exit(1); +} + +void broadcast(fd_set *set, int max_fd, char *msg, int server_fd, int current_fd) { + for(int i = 0; i < max_fd; ++i) { + if (i == server_fd) + continue; + if (i == current_fd) + continue; + if (FD_ISSET(i, set)) + send(i, msg, strlen(msg), 0); + } +} + +int main(int ac, char **av) { + int server_fd; + int client_fd; + int id; + int port; + int max_fd; + int ret; + struct sockaddr_in addr; + socklen_t addr_len; + fd_set fdset; + fd_set rdset; + t_client clients[FD_SETSIZE]; + t_client client; + char buf[BUFSIZE]; + char msg[BUFSIZE]; + + if (ac != 2) + error("Wrong number of arguments\n"); + if ( (port = atoi(av[1])) == -1) + error("Fatal error\n"); + addr_len = sizeof(addr); + + // socket create and verification + server_fd = socket(AF_INET, SOCK_STREAM, 0); + if (server_fd == -1) + error("Fatal error\n"); + + // assign IP, PORT + addr.sin_family = AF_INET; + addr.sin_addr.s_addr = htonl(2130706433); //127.0.0.1 + addr.sin_port = htons(port); + + // Binding newly created socket to given IP and verification + if ((bind(server_fd, (const struct sockaddr *)&addr, addr_len)) == -1) + error("Fatal error\n"); + if (listen(server_fd, 10) == -1) + error("Fatal error\n"); + + FD_ZERO(&fdset); + FD_SET(server_fd, &fdset); + max_fd = server_fd; + id = 0; + bzero(&clients, sizeof(clients)); + + while(1) { + rdset = fdset; + + select(max_fd + 1, &rdset, NULL, NULL, NULL); + + if (FD_ISSET(server_fd, &rdset)) { + client_fd = accept(server_fd, (struct sockaddr *)&addr, &addr_len); + FD_SET(client_fd, &fdset); + if (client_fd > max_fd) + max_fd = client_fd; + client = clients[client_fd]; + client.id = id; + bzero(client.msg, MSGSIZE); + sprintf(msg, "server: client %d arrived\n", client.id); + broadcast(&fdset, max_fd, msg, server_fd, client_fd); + id++; + } + + client_fd = 0; + while(client_fd <= max_fd) { + ret = 1; + if (FD_ISSET(client_fd, &rdset)) { + + client = clients[client_fd]; + bzero(buf, BUFSIZE); + ret = recv(client_fd, buf, BUFSIZE, 0); + + if (ret == 0) { + sprintf(msg, "server: client %d left\n", client.id); + broadcast(&fdset, max_fd, msg, server_fd, client_fd); + FD_CLR(client_fd, &fdset); + } + + else if (ret > 0) { + for(int i = 0, j = strlen(client.msg); i < ret; ++i, ++j) { + client.msg[j] = buf[i]; + if (buf[i] == '\n') { + client.msg[j] = '\0'; + sprintf(msg, "client %d: %s\n", client.id, client.msg); + broadcast(&fdset, max_fd, msg, server_fd, client_fd); + bzero(client.msg, MSGSIZE); + j = -1; + } + } + } + } + client_fd++; + } + } + return (0); +} + +