From 485005ed4a1b68ca4e62c8296347c24c96d3415c Mon Sep 17 00:00:00 2001 From: Pavalean-Alexandru Date: Tue, 13 May 2025 13:39:13 +0200 Subject: [PATCH] consenga esercitazioen tcp --- 4INFO_2425 | 1 - .../TCP/pavalean_echo_server_tcp | Bin 0 -> 17640 bytes .../TCP/pavalean_echo_server_tcp.c | 131 ++++++++++++++++++ .../TCP/pavalean_echo_server_tcp.exe | Bin 0 -> 17640 bytes 4 files changed, 131 insertions(+), 1 deletion(-) delete mode 160000 4INFO_2425 create mode 100755 RETI/pavalean_alexandru/TCP/pavalean_echo_server_tcp create mode 100644 RETI/pavalean_alexandru/TCP/pavalean_echo_server_tcp.c create mode 100755 RETI/pavalean_alexandru/TCP/pavalean_echo_server_tcp.exe diff --git a/4INFO_2425 b/4INFO_2425 deleted file mode 160000 index aafef4ce..00000000 --- a/4INFO_2425 +++ /dev/null @@ -1 +0,0 @@ -Subproject commit aafef4ce6dd432edfffeedd06ca4a1ea9e96b602 diff --git a/RETI/pavalean_alexandru/TCP/pavalean_echo_server_tcp b/RETI/pavalean_alexandru/TCP/pavalean_echo_server_tcp new file mode 100755 index 0000000000000000000000000000000000000000..c4d7de4ae4c227ce081e562699a04a477d80d30c GIT binary patch literal 17640 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 Bwr>Cc literal 0 HcmV?d00001 diff --git a/RETI/pavalean_alexandru/TCP/pavalean_echo_server_tcp.c b/RETI/pavalean_alexandru/TCP/pavalean_echo_server_tcp.c new file mode 100644 index 00000000..f86eff1e --- /dev/null +++ b/RETI/pavalean_alexandru/TCP/pavalean_echo_server_tcp.c @@ -0,0 +1,131 @@ +#include +#include +#include +#include +#include +#include + +/* +man 7 ip +man 7 tcp + */ + +#define BUFSIZE 1024 +#define MAX_CONN 10 + +/* man perror */ +void error(char *msg) +{ + perror(msg); + exit(1); +} + +int socket_create() +{ + int socket_fd; + + if((socket_fd = socket(AF_INET, SOCK_STREAM, IPPROTO_TCP)) < 0){ + error("Errore nella creazione del socket"); + exit(1); + } + return socket_fd; +} + +void socket_bind(int socket_fd, unsigned short tcp_port) +{ + struct sockaddr_in serveraddr; /* server address */ + + /* inizializza la struttura che contiene le informazioni del socket */ + memset(&serveraddr, '0', sizeof(serveraddr)); + serveraddr.sin_family = AF_INET; /* socket IP */ + serveraddr.sin_addr.s_addr = htonl(INADDR_ANY); /* 0.0.0.0 */ + serveraddr.sin_port = htons(tcp_port); /* porta tcp in network order*/ + + /* bind del socket con indirizzo e porta */ + if(bind(socket_fd, (struct sockaddr *) &serveraddr, sizeof(serveraddr)) < 0) + error("Errore nella fase di binding"); +} + +void socket_listen(int socket_fd) +{ + if(listen(socket_fd, MAX_CONN) < 0) /* in ascolto sul socket max 10 connessioni*/ + error("Errore nella fase di listen"); +} + +int socket_accept(int socket_fd) +{ + int connection_fd; + struct sockaddr_in clientaddr; /* client address */ + socklen_t clientlen = sizeof(clientaddr); + + /* accetta una connessione TCP da un client */ + if((connection_fd = accept(socket_fd, + (struct sockaddr *) &clientaddr, + &clientlen)) < 0) + error("Errore nella fase di accept"); + return connection_fd; +} + +int socket_receive(int socket_fd, char *buf) +{ + int msg_size; + + bzero(buf, BUFSIZE); + if((msg_size = read(socket_fd, buf, BUFSIZE)) < 0) + error("Errore nella ricezione dati"); + + return msg_size; +} + +int socket_send(int socket_fd, char *buf) +{ + int byte_sent; + + if((byte_sent = write(socket_fd, buf, strlen(buf))) < 0) + error("Errore nell'invio dati"); + + return byte_sent; +} + +int main(int argc, char **argv) +{ + unsigned short tcp_port; /* TCP port in ascolto */ + int socket_fd; /* welcoming socket file descriptor */ + int connection_fd; /* connection socket file descriptor */ + char buf[BUFSIZE]; /* RX buffer */ + int byte_sent; + int msg_size; /* dimensione messaggio ricevuto */ + + /* Verifico la presenza del parametro porta e lo leggo*/ + if(argc != 2) { + printf("uso: %s \n", argv[0]); + exit(1); + } + tcp_port = (unsigned short)atoi(argv[1]); + + /* Creo il socket */ + socket_fd = socket_create(); + + /* bind del socket a IP e porta */ + socket_bind(socket_fd, tcp_port); + + /* metto il socket in ascolto */ + socket_listen(socket_fd); + + /* ciclo principale del server */ + printf("Server TCP pronto e in ascolto sulla porta %d\n\n", tcp_port); + for(;;) { + /* rimango in attesa fino a quando arriva una richiesta da un client */ + connection_fd = socket_accept(socket_fd); + + msg_size = socket_receive(connection_fd, buf); + printf("TCP server ha appena ricevuto %d byte: %s\n", msg_size, buf); + + byte_sent = socket_send(connection_fd, buf); + + printf("Ho appena inviato %d bytes con successo!\n", byte_sent, buf); + + /* chiudo la connessione con il client */ + close(connection_fd); + } +} \ No newline at end of file diff --git a/RETI/pavalean_alexandru/TCP/pavalean_echo_server_tcp.exe b/RETI/pavalean_alexandru/TCP/pavalean_echo_server_tcp.exe new file mode 100755 index 0000000000000000000000000000000000000000..aadb73b53e855ff98e67b58005d9e3a14a9612fe GIT binary patch literal 17640 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 D*3`0X literal 0 HcmV?d00001