simple-socket library 1.5.0
Loading...
Searching...
No Matches
UDP_Commands.cpp

UDP server and client demo, sending commands from console.

#include <simple_socket/UDPSocket.h>
#include <array>
#include <iostream>
static const char LOOPBACK[] = "127.0.0.1";
static const unsigned short PORT = 47778;
static int runServer()
{
socket.bind(LOOPBACK, PORT);
std::cout << "Listening for UDP commands on " << LOOPBACK << ":" << PORT << std::endl;
std::array<char, 256> buffer{};
while(true)
{
std::string sourceAddress;
unsigned short sourcePort = 0;
int received = socket.receiveFrom(buffer.data(), buffer.size(), sourceAddress, sourcePort);
std::string command(buffer.data(), static_cast<size_t>(received));
std::cout << "Received from " << sourceAddress << ":" << sourcePort << " " << command << std::endl;
if (command == "quit")
{
std::cout << "Stopping." << std::endl;
break;
}
}
return 0;
}
static int sendCommand(const std::string& command)
{
socket.sendTo(command.data(), command.size(), LOOPBACK, PORT);
std::cout << "Sent command: " << command << std::endl;
return 0;
}
int main(int argc, char* argv[])
{
try
{
if (argc == 2 && std::string(argv[1]) == "server")
{
return runServer();
}
if (argc == 3 && std::string(argv[1]) == "send")
{
return sendCommand(argv[2]);
}
std::cerr
<< "Usage:\n"
<< " " << argv[0] << " server\n"
<< " " << argv[0] << " send <command>\n";
return 1;
}
catch (const NET::SocketException& e)
{
std::cerr << e.what() << std::endl;
return 1;
}
}
void bind(unsigned short localPort=0)
Signals a problem with the execution of a socket call.
const char * what() const noexcept
Returns a C-string describing the cause of the current error.
UDP socket class.
Definition UDPSocket.h:10
int receiveFrom(void *buffer, size_t len, std::string &sourceAddress, unsigned short &sourcePort)
Definition UDPSocket.cpp:49
void sendTo(const void *buffer, size_t len, std::string_view foreignAddress, unsigned short foreignPort)
Definition UDPSocket.cpp:38