110 lines
2.5 KiB
C++
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;
|
|
}
|
|
|