Files
Sockets/main.cpp
2024-09-16 14:42:22 -04:00

110 lines
2.5 KiB
C++

#include <Sockets/TcpSocket.hpp>
#include <iostream>
#include <exception>
#include <cstring>
#include <memory>
#include "Sockets/UdpSocket.hpp"
#include <Sockets/Endianness.hpp>
using namespace Socket;
/// Spins up a TCP server, listens for connections, and echoes input directly back to the client.
/// While running this function, use the terminal program netcat to connect and send messages:
/// nc localhost 40269
void TCP_ReceiveTest()
{
using Socket_p = std::shared_ptr<TcpSocket>;
Socket_p sock(new TcpSocket);
Socket_p client;
try {
sock->Bind(42069);
sock->Listen(5);
client = sock->Accept();
} catch(std::exception &e) {
std::cout << e.what() << std::endl;
return;
}
// Welcoming the new users
std::string payload = "Welcome!\n\f";
client->Send(reinterpret_cast<const u8 *>(payload.data()), payload.size(), 0);
// Closing the listening socket, we want nobody else.
sock->Close();
u8 data[512];
memset(&data, 0, 512);
while (client->Receive(data, sizeof data, 0))
{
std::cout << "[Recv] " << data << std::endl;
client->Send(data, sizeof data, 0);
memset(&data, 0, 512);
}
client->Close();
}
void UDP_ReceiveTest()
{
using UdpSocket_p = std::shared_ptr<UdpSocket>;
UdpSocket_p sock (new UdpSocket);
try
{
sock->Open();
sock->Bind(42575);
} catch(const std::exception& e) {
std::cout << e.what() << std::endl;
return;
}
UdpSocket_p client (new UdpSocket);
try {
client->Open();
client->Connect(42575);
std::string payload = "bruh";
client->Send(reinterpret_cast<const u8 *>(payload.data()), payload.size());
//client->SendTo(IPAddress::Loopback(42575), reinterpret_cast<const u8 *>(payload.data()), payload.size(), 0);
//client->BindAny();
//client->Open();
//client->Connect(sock->GetSelfIP());
} catch(const std::exception& e) {
std::cout << e.what() << std::endl;
return;
}
client->Close();
sock->Close();
}
int main(int argc, char *argv[])
{
if (Socket::Endianness::IsBigEndian())
std::cout << "Big Endian" << std::endl;
if (Socket::Endianness::IsLittleEndian())
std::cout << "Little Endian" << std::endl;
float val = 420.5f;
float a = Socket::Endianness::HostToNetworkOrder(val);
a = Socket::Endianness::NetworkToHostOrder(a);
std::cout << a << std::endl;
TCP_ReceiveTest();
UDP_ReceiveTest();
return 0;
}