From cf86eea3ef47ce4444b99edff866a7d9836bd763 Mon Sep 17 00:00:00 2001 From: Oskar Date: Mon, 3 Jun 2024 10:46:16 +0200 Subject: udp client-DGRAM --- client-DGRAM.c | 91 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 client-DGRAM.c (limited to 'client-DGRAM.c') diff --git a/client-DGRAM.c b/client-DGRAM.c new file mode 100644 index 0000000..f447d37 --- /dev/null +++ b/client-DGRAM.c @@ -0,0 +1,91 @@ +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#define __FAIL EXIT_FAILURE +#define BACKLOG 2 +#define __PORT "62000" +#define BUF_SZ_2 2048 + +int sockfd = -1; +size_t bytes_sent = 0; +struct addrinfo *resfreer; +struct addrinfo *pglobal; + +void talk_to_server (int sockfd) { + + while (1) { + char editbuffer[BUF_SZ_2]; + fprintf(stdout, ": "); + + char *fgs = fgets(editbuffer, BUF_SZ_2, stdin); + socklen_t fgs_len = strlen(editbuffer); + if (fgs == NULL) { + continue; + } + + bytes_sent = bytes_sent + sendto(sockfd, editbuffer, fgs_len, 0, pglobal->ai_addr, pglobal->ai_addrlen); + } +} + +void INThandler() { + + fprintf(stderr, "\nbytes sent: %ld\n", bytes_sent); + freeaddrinfo(resfreer); + close(sockfd); + exit(0); +} + +int main (int argc, char *argv[]) { + + if (argc != 2) { + fprintf(stderr, "USAGE: %s [IP]\n", argv[0]); + exit(__FAIL); + } + + int gai_result; + struct addrinfo hints; + struct addrinfo *res; + struct addrinfo *p; + memset(&hints, 0, sizeof(hints)); + hints.ai_family = AF_INET; + hints.ai_socktype = SOCK_DGRAM; + + gai_result = getaddrinfo(argv[1], __PORT, &hints, &res); + if (gai_result != 0) { + fprintf(stderr, "getaddrinfo: %d\n", gai_result); + exit(__FAIL); + } + + for (p = res ; p != NULL ; p = p->ai_next) { + + sockfd = socket(p->ai_family, p->ai_socktype, p->ai_protocol); + if (sockfd == -1) { + fprintf(stderr, "socket fail\n"); + continue; + } else { + pglobal = p; + } + + } + if (sockfd == -1) { + close(sockfd); + exit(__FAIL); + } + + signal(SIGINT, INThandler); + resfreer = res; + talk_to_server(sockfd); + + return 0; +} -- cgit v1.2.3