#include "easysock.h" #include /* Client class - Defines a TCP/UDP client. - The constructor takes in a **remote** address and port, and connects the client to that address/port. */ class Client { private: int ip_ver; char protocol; int port; int sock_fd; std::string address; void create_socket() { struct sockaddr* dest = (struct sockaddr *)malloc(sizeof(struct sockaddr)); this->sock_fd = create_remote(this->ip_ver, this->protocol, this->address.data(), this->port, dest); } public: Client(int ip_ver, char protocol, const char* address, int port) { /* Error checking */ if (ip_ver != 4 && ip_ver != 6) { throw std::invalid_argument("Invalid IP address type"); } if (port < 1024 || port > 65535) { throw std::invalid_argument("Invalid port"); } if (protocol != 'T' && protocol != 'U') { throw std::invalid_argument("Invalid protocol"); } this->ip_ver = ip_ver; this->protocol = protocol; this->port = port; this->address = std::string(address); create_socket(); } void sendAll(std::string to_send) { int str_length = to_send.length(); int num_bytes_sent = 0; /* Number of bytes sent in one call to send */ int total_bytes_sent = 0; /* Total number of bytes sent */ while (total_bytes_sent < str_length) { num_bytes_sent = send(this->getSockFD(), to_send.substr(total_bytes_sent).data(), str_length - total_bytes_sent, 0); total_bytes_sent += num_bytes_sent; } return; } int getSockFD() { return sock_fd; } };