# UDP Server component for esp-idf Send & Receive messages on default event loop. ## Installation idf.py add-dependency "larryli/udp_server" ## Getting Started ### Init & Deinit ```c #include "htpad_server.h" #define PORT 10000 udp_server_init(PORT); udp_server_deinit(); ``` ### Receive message ```c static void on_recv(void *handler_arg, esp_event_base_t base, int32_t id, void *event_data) { if (event_data == NULL) { return; } udp_msg_t *msg = (udp_msg_t *)event_data; ESP_LOGI(TAG, "Received %d bytes from %s:%d", msg->len, udp_remote_ipstr(msg->remote), udp_remote_port(msg->remote)); ESP_LOG_BUFFER_HEXDUMP(TAG, msg->payload, msg->len, ESP_LOG_INFO); free(msg->remote); free(msg->payload); } esp_event_handler_register(UDP_EVENT, UDP_EVENT_RECV, on_recv, NULL); ``` ### Save remote ip & port ```c void *remote = udp_remote_clone(msg->remote); if (udp_remote_eq(msg->remote, remote)) { // is saved remote } free(remote); ``` ### Send message ```c char *str = "This is a message."; udp_msg_t msg = { .len = strlen(str), }; msg.remote = udp_remote_clone(remote); if (msg.remote != NULL) { msg.payload = malloc(msg.len); if (msg.payload != NULL) { memcpy(msg.payload, str, msg.len); if (esp_event_post(UDP_EVENT, UDP_EVENT_SEND, &msg, sizeof(udp_msg_t), 20 / portTICK_PERIOD_MS) != ESP_OK) { free(msg.remote); free(msg.payload); } } else { free(msg.remote); } } ```
20a53dc950a3ed291669acd5b2a8e961823edef7
idf.py add-dependency "larryli/udp_server^1.0.1"