Internet Protocol
Header Only Library

UDP Server

How to use UDP server class

References

#include "IP/InternetProtocol.hpp"

Syntax

namespace InternetProtocol
class UDPServer

Example code

#include <iostream>
#include <IP/UDP/UDPServer.hpp>
 
using namespace InternetProtocol;
 
int main()
{
    UDPServer server;
    server.set_socket(EProtocolType::V4, 3000);
    server.on_message_received = [](const FUdpMessage message, const asio::ip::udp::endpoint &endpoint) {
        std::cout << endpoint.port() << " -> " << buffer_to_string(message.raw_data) << std::endl;
    };
    server.open();
 
    std::string input;
    std::cout << "Digite algo: ";
    while (std::getline(std::cin, input)) {
        if (input == "quit")
        {
            server.close();
            break;
        }
    }
    return 0;
}

Variables

FUdpMessage

namespace InternetProtocol
 
struct FUdpMessage {
    FUdpMessage() { rawData.resize(1024); }
    std::vector<std::byte> rawData;
    size_t size = 0;
};

Functions

SetSocket

  • Set socket protocol and port
void set_socket(const EProtocolType protocol, const uint16_t port)

Get Socket

  • Get socket connection properties
asio::ip::udp::socket &get_socket()

Set Max Receive Buffer Size

  • Set max size in bytes of receive buffer
void set_max_sen_buffer_size(int value = 1024)

Get Max Receive Buffer Size

  • Get max size in bytes of receive buffer
int get_max_send_buffer_size() const

Set Split Package

  • If the size of a message exceeds the maximum allowed size for the send buffer, it will be divided into smaller packets before being sent.
void set_split_package(bool value = true)

Get Split Package

  • Get if Split Package is enabled
bool get_split_package() const

Send Str To

  • Send a string message to specifc endpoint
  • Return false if message is empty or socket is closed
  • Warning: If you’re using Windows, ensure that you are sending characters compatible with UTF*8
bool send_str_to(const std::string &message, const asio::ip::udp::endpoint &endpoint)

Send Buffer To

  • Send a buffer message
  • Return false if buffer is empty or socket is closed
bool send_buffer(const std::vector<uint8_t> &buffer, const asio::ip::udp::endpoint &endpoint)

Open

  • Open socket connection
  • Return false if socket is already open or any error occurs
  • Event on_error is triggered if any error occurs
bool open()

Close

  • Close socket
void close()

Get Error Code

  • Get latest error code
asio::error_code get_error_code() const

Events

On Bytes Transferred

  • Event triggered when socket send or receive data
  • size_t: bytes sent
  • size_t: bytes received
std::function<void(const size_t, const size_t)> on_bytes_transfered

On Message Sent

  • Event triggered when a message is sent
  • const asio::error_code &: if error occur, error code will be different from 0
std::function<void(const asio::error_code &, const asio::ip::udp::endpoint &)> on_message_sent

On Message Received

  • Event triggered when a message is received by a endpoint
  • FUdpMessage: message struct
  • Use buffer_to_string() function to converte raw_data to std::string
std::function<void(const FUdpMessage, const asio::ip::udp::endpoint &)> on_message_received

On Close

  • Event triggered when socket is closed
std::function<void()> on_close

On Error

  • Event triggered if any error occur during async process
  • const asio::error_code &: if error occur, error code will be different from 0
  • Normally, when an error occurs, the socket is automatically closed, triggering the on_close event.
std::function<void(const asio::error_code &)> on_error