82 lines
1.7 KiB
C++
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
|