#pragma once #include #include #include #include #include #pragma comment(lib, "WS2_32.lib") class Net { public: static const unsigned short TYPICAL_MTU = 1480; static const unsigned char MACSize = 6; struct IPAddress { private: unsigned char address[4]; public: IPAddress(); IPAddress(unsigned char c1, unsigned char c2, unsigned char c3, unsigned char c4); IPAddress(unsigned long IP); static IPAddress Empty(); bool Equals(IPAddress other); }; struct IPEndPoint { struct sockaddr_in socks; IPAddress Address; IPEndPoint(unsigned long IP, unsigned short Port); }; class UdpClient { struct Socket { struct sockaddr_in socks; SOCKET sock; void Bind(IPEndPoint ep); void Bind(unsigned long IP, unsigned short Port); }; public: Socket Client; UdpClient(); unsigned char* Recieve(IPEndPoint* remote, unsigned short BufferSize = 1480); int Send(char* Datagram, short DatagramSize, IPEndPoint ep); int Send(std::vector Datagram, IPEndPoint ep); /// /// Sends the data in Datagram to the destination IP address & port. /// /// A std::vector<u_char> of the data to be sent /// The destination IP address (Little Endian) /// The destination port (Little Endian) /// A value less than zero if an error occured int Send(std::vector Datagram, std::vector DestinationIP, int DestPort); /// /// Gets the amount of bytes available, or zero if no connection is yet available /// /// int Available(); }; struct MACAddress { unsigned char macBytes[6]; MACAddress(unsigned char c1, unsigned char c2, unsigned char c3, unsigned char c4, unsigned char c5, unsigned char c6); MACAddress(unsigned char* byteArray); MACAddress(std::vector bytes); bool equals(MACAddress other); static MACAddress GetEmpty() { return MACAddress(0, 0, 0, 0, 0, 0); } }; };