From 4afebdcb2b0ff40b7bbf8595d4bd0ee451fbef45 Mon Sep 17 00:00:00 2001 From: Dmitry Frank <mail@dmitryfrank.com> Date: Tue, 6 Feb 2018 01:24:29 +0200 Subject: [PATCH] Add UDP client example CL: Mongoose Web Server: Add UDP client example Resolves https://github.com/cesanta/mongoose/issues/886 PUBLISHED_FROM=fcce2f1de3a800147e9246ffa01c428c1b8f552b --- examples/udp_client/Makefile | 2 ++ examples/udp_client/udp_client.c | 60 ++++++++++++++++++++++++++++++++ 2 files changed, 62 insertions(+) create mode 100644 examples/udp_client/Makefile create mode 100644 examples/udp_client/udp_client.c diff --git a/examples/udp_client/Makefile b/examples/udp_client/Makefile new file mode 100644 index 000000000..00ebca381 --- /dev/null +++ b/examples/udp_client/Makefile @@ -0,0 +1,2 @@ +PROG = udp_client +include ../examples.mk diff --git a/examples/udp_client/udp_client.c b/examples/udp_client/udp_client.c new file mode 100644 index 000000000..faeb2ebed --- /dev/null +++ b/examples/udp_client/udp_client.c @@ -0,0 +1,60 @@ +/* + * Copyright (c) 2014-2018 Cesanta Software Limited + * All rights reserved + * + * This program sends provided data to the provided UDP server and port, and + * then prints all incoming data, until user stops the program. + */ + +#include "mongoose.h" + +#define ADDR_BUF_SIZE 256 + +static void ev_handler(struct mg_connection *nc, int ev, void *ev_data) { + switch (ev) { + case MG_EV_RECV: + fprintf(stderr, "%.*s", (int) nc->recv_mbuf.len, nc->recv_mbuf.buf); + nc->recv_mbuf.len = 0; + break; + default: + break; + } + + (void) ev_data; +} + +int main(int argc, char *argv[]) { + struct mg_mgr mgr; + char addr[ADDR_BUF_SIZE]; + + mg_mgr_init(&mgr, NULL); + + if (argc != 3) { + fprintf(stderr, "Usage: %s <server:port> <data>\n", argv[0]); + exit(EXIT_FAILURE); + } + + snprintf(addr, sizeof(addr), "udp://%s", argv[1]); + + fprintf(stderr, "Connecting to '%s'\n", addr); + + struct mg_connection *nc = mg_connect(&mgr, addr, ev_handler); + + if (nc == NULL) { + fprintf(stderr, "Failed to connect"); + exit(1); + } + + fprintf(stderr, "Sending '%s'\n", argv[2]); + + mg_send(nc, argv[2], strlen(argv[2])); + + fprintf(stderr, "Waiting for data\n"); + + for (;;) { + mg_mgr_poll(&mgr, 10); + } + mg_mgr_free(&mgr); + + return 0; +} -- GitLab