Files
TCP_SERVER_WIN_LIN/tcp_server.h
2019-07-30 22:08:05 +02:00

82 lines
1.7 KiB
C++

#ifndef TCP_SERVER_H
#define TCP_SERVER_H
#ifndef linux
#define Windows
#endif
#include <iostream>
#include <unistd.h>
#include <signal.h> // für signal() function, weil send gibt SIGPIPE zurück, (wenn letzter prozess beendet oder so... nur für schellscripts nötig),
//und da programm abstürzt. nicht wichtig für tcp
#include <string.h>
#ifdef Windows
#include <winsock2.h>
#include <windows.h>
#include <ws2tcpip.h>
#include <typeinfo>
#else
#include <sys/socket.h>
#include <arpa/inet.h>
#include <netdb.h> // for hostent ( getIpByName-Func )
#endif
class CLIENT
{
public:
CLIENT(size_t buffer_size);
~CLIENT();
void setAddress(int socket, sockaddr_in clientAddress);
void disconnectIfItIsConnected();
ssize_t sendMessage(std::string Message);
ssize_t recvMessage(std::string &Buffer, bool peek = false);
ssize_t sendToClient(const void * buffer, size_t __n, int flag = 0);
ssize_t recvFromClient(void * buffer, size_t __n, int flag = 0);
sockaddr_in getAddress();
int getSocket();
bool isConnected();
private:
sockaddr_in clientAddress;
int clientSocket;
size_t sizeof_sockaddr_in;
char * buffer;
unsigned long buffer_size;
};
class TCP_SERVER
{
public:
TCP_SERVER();
~TCP_SERVER();
int start(int port, int maxWaitingQueque = 3);
int acceptClient(CLIENT &client);
void shutdownAccpetSocketIfItIsConnected();
int getServerSocket();
int getPort();
bool isStarted();
std::string getIpByName(std::string name);
std::string getHostName();
private:
size_t sizeof_sockaddr_in;
sockaddr_in serverAddresse;
int serverSocket, port;
};
#endif // TCP_SERVER_H