From df4bb83d347996eabd3f964db2a33ef9848c2f63 Mon Sep 17 00:00:00 2001 From: nbillard Date: Tue, 7 Feb 2023 14:25:55 +0100 Subject: [PATCH] puits tcp --- tsock_v0.c => tsock_test_Nathan.c | 131 ++++++++++++++++++++---------- 1 file changed, 88 insertions(+), 43 deletions(-) rename tsock_v0.c => tsock_test_Nathan.c (69%) diff --git a/tsock_v0.c b/tsock_test_Nathan.c similarity index 69% rename from tsock_v0.c rename to tsock_test_Nathan.c index 531fc40..ebb3bca 100644 --- a/tsock_v0.c +++ b/tsock_test_Nathan.c @@ -20,9 +20,11 @@ données du réseau */ #define DEFAULTPORT 9000 #define MSG_LENGTH 10 +#define NB_CLIENTS 1 +#define TCP_BUFFER_LEN 2000 void usage(char* prog) { - printf("usage: %s [-p|-s][-u][-n ##]\n", prog); + printf("usage: %s [-p|-s][-u|-t][-n ##]\n", prog); } void construire_message(char* message, char motif, int lg) { @@ -58,6 +60,19 @@ void sendudp(int sock, char* message, int msg_len, void* addr, unsigned int addr printf("message sent: %s\n", message); } +void recvtcp(int sock) { + char buffer[TCP_BUFFER_LEN]; + size_t nb_octed_read = read(sock, buffer, TCP_BUFFER_LEN - 1); + if (nb_octed_read < 0) { + perror("Could not read octed-stream: "); + exit(1); + } else { + buffer[nb_octed_read] = '\0'; + printf("message recieved: %s\n", buffer); + } + +} + void afficher_message(char* message, int lg) { message[lg] = '\0'; printf("message construit: %s", message); @@ -71,13 +86,14 @@ int main (int argc, char **argv) int nb_message = -1; /* Nb de messages à envoyer ou à recevoir, par défaut : 10 en émission, infini en réception */ int source = -1 ; /* 0=puits, 1=source */ char* hostname; - int protocole = 0; /* 0=tcp, 1=udp */ + int protocole = -1; /* 0=tcp, 1=udp */ int sock; char* message; struct hostent *hp; struct sockaddr_in addr_local; struct sockaddr_in addr_distant; - while ((c = getopt(argc, argv, "hu:pn:s")) != -1) { + unsigned int addr_distant_len = sizeof(addr_distant); + while ((c = getopt(argc, argv, "ht:u:pn:s")) != -1) { switch (c) { case 'h': usage(argv[0]); @@ -105,13 +121,20 @@ int main (int argc, char **argv) break; case 'u': + if (!protocole) { + usage(argv[0]); + exit(1); + } protocole = 1; - printf("%s\n", optarg); hostname = optarg; - /* hostname = malloc((strlen(optarg) + 1) * sizeof(char)); */ - /* strcpy(hostname, optarg); */ break; - + case 't': + if (protocole) { + usage(argv[0]); + exit(1); + } + protocole = 0; + hostname = optarg; default: usage(argv[0]); /* printf("usage: cmd [-p|-s][-n ##]\n"); */ @@ -119,6 +142,10 @@ int main (int argc, char **argv) } } + if (protocole == -1) { + protocole = 1; + } + if (source == -1) { usage(argv[0]); /* printf("usage: cmd [-p|-s][-n ##]\n"); */ @@ -175,47 +202,65 @@ int main (int argc, char **argv) exit(1); } - - memset(&addr_distant, 0, sizeof(addr_local)); - addr_distant.sin_family = AF_INET; - addr_distant.sin_port = DEFAULTPORT; - printf("%s\n", hostname); - hp = gethostbyname(hostname); - if (hp == NULL) { - printf("hosname not found\n"); - /* herror("Error: "); */ - exit(1); - } - printf("hostname found\n"); - - memcpy(&addr_distant.sin_addr.s_addr, hp->h_addr, hp->h_length); - printf("socket bound\n"); - message = malloc((MSG_LENGTH + 1) * sizeof(char)); - if (source) { - construire_message(message, 'a', MSG_LENGTH); - if (nb_message < 0) { - while (1) { - sendudp(sock, message, MSG_LENGTH, &addr_distant, sizeof(addr_distant)); - } - } else { - for (int i = 0; i < nb_message; ++i) { - sendudp(sock, message, MSG_LENGTH, &addr_distant, sizeof(addr_distant)); - } + if (!protocole) /* if udp activated */ { + memset(&addr_distant, 0, sizeof(addr_local)); + addr_distant.sin_family = AF_INET; + addr_distant.sin_port = DEFAULTPORT; + printf("%s\n", hostname); + hp = gethostbyname(hostname); + if (hp == NULL) { + printf("hosname not found\n"); + /* herror("Error: "); */ + exit(1); } + printf("hostname found\n"); - } else { - if (nb_message < 0) { - while (1) { - recvudp(sock, message, MSG_LENGTH, &addr_distant, sizeof(addr_distant)); - } - } else { - for (int i = 0; i < nb_message; ++i) { - recvudp(sock, message, MSG_LENGTH, &addr_distant, sizeof(addr_distant)); - } + memcpy(&addr_distant.sin_addr.s_addr, hp->h_addr, hp->h_length); + } else /* tcp activated */{ + + if (listen(sock, NB_CLIENTS) < 0) { + perror("Server could not listen: "); + exit(1); + } + if (accept(sock, (struct sockaddr*) &addr_distant, &addr_distant_len) < 0) { + perror("Server could not accept connection: "); + exit(1); + } + } + + + + message = malloc((MSG_LENGTH + 1) * sizeof(char)); + if (protocole) /* tcp activated */ { + if (source) { + ; + } else /*puit */ { + recvtcp(sock); + } + } else /* udp activated */ { + if (source) { + construire_message(message, 'a', MSG_LENGTH); + if (nb_message < 0) { + nb_message = 10; + } + for (int i = 0; i < nb_message; ++i) { + sendudp(sock, message, MSG_LENGTH, &addr_distant, sizeof(addr_distant)); + } + + } else { + if (nb_message < 0) { + while (1) { + recvudp(sock, message, MSG_LENGTH, &addr_distant, sizeof(addr_distant)); + } + } else { + for (int i = 0; i < nb_message; ++i) { + recvudp(sock, message, MSG_LENGTH, &addr_distant, sizeof(addr_distant)); + } + } + printf("puit not implemented\n"); } - printf("puit not implemented\n"); }