#pragma once #ifndef _WINSOCKAPI_ #define _WINSOCKAPI_ #include #endif #include "Utils.h" class TcpServer { public: SOCKET serverSocket; SOCKET clientSocket; WSADATA wsaData; std::string addr; std::string port; TcpServer(const char* addr, const char* port): addr(addr), port(port) { } bool listen(); bool waitClient(); void close(); int send(const char* buf, size_t len); bool sendAll(const char* buf, size_t len); int recv(char* buffer, size_t len); bool recvUntil(char* buffer, size_t len); template bool send(const T& value); template bool recv(T& value); }; template bool TcpServer::send(const T& value) { return sendAll((const char*)&value, sizeof(T)); } template bool TcpServer::recv(T& value) { return recvUntil((char*)&value, sizeof(T)); } template<> bool TcpServer::send(const std::string& value); template<> bool TcpServer::recv(std::string& value);