You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

172 lines
4.3 KiB

/** \class SocketObject
*
* \brief Die Klasse SocketObject kapselt die Verwendung von Sockets
*
* Die Klasse SocketObject liefert eine komfortable Benutzungs-Schnittstelle
* für Sockets.
* Sie bietet Methoden zum Senden und Empfangen von verschiedenen Datentypen,
* sowie Methoden zum Verbindungsauf- und abbau.
*/
#ifndef _SOCKETOBJECT_H
#define _SOCKETOBJECT_H
#if (defined(__msdos__) || defined(WIN32))
#include <winsock.h>
#else
#include <sys/types.h>
#include <sys/socket.h>
#include <netinet/in.h>
#include <arpa/inet.h>
#include <netdb.h>
#include <fcntl.h>
#include <unistd.h>
#endif
#include <string>
#include <sstream>
#include <vector>
#define SOCKETOBJECT_NOT_CONNECTED "SOCKETOBJECT_NOT_CONNECTED"
#define SOCKETOBJECT_RECV_ERROR "SOCKETOBJECT_RECV_ERROR"
class SocketObject {
public:
static const int MAXRECV = 1024;
private:
#if defined(__msdos__) || defined(WIN32)
SOCKET _skSocket;
#else
int _skSocket;
#endif
public:
#if defined(__msdos__) || defined(WIN32)
// Konstruktor der Klasse
SocketObject();
// Copy-Konstruktor
SocketObject(SocketObject& sk);
// Destruktor der Klasse
~SocketObject();
#endif
/****** NUR SERVER - METHODEN ******/
/** \brief Bindet Socket an einen Port
*
* Die bind()-Methdode gibt dem Socket einen
* lokalen Namen, damit andere Prozesse mit
* ihm kommunizieren k&ouml;nnen.
* Wird <b>nur vom Server</b> benutzt!
*
* @param iPort Port an den gebunden werden soll
*
* @return 0 = ok, SOCKET_ERROR = Fehler
*
*/
int Bind(unsigned short int iPort);
/** \brief Wartet auf eigehende Verbindungsanfragen
*
* Die Listen()-Methode erwartet eingehende
* Verbindungsanfragen.
* Wird <b>nur vom Server</b> benutzt!
*
* @return 0 = ok, SOCKET_ERROR = Fehler
*
*/
int Listen();
/** \brief Acceptiert eingehende Verbindungsanfrage
*
* Die accept()-Methode akzeptiert eine eingehende
* Verbindung und "startet" die Verbindung"
* Wird <b>nur vom Server</b> benutzt!
*
* @param skAcceptSocket zu akzeptierender Socket
*/
bool Accept(SocketObject &skAcceptSocket);
/****** SERVER - METHODEN ENDE ******/
/****** NUR CLIENT - METHODEN ******/
/** \brief Stellt Verbindsanfage an den Server
*
* Mittels der connect()-Methode stellt der Client
* eine Verbindungsanfrage an den Server her, der
*
*
* Wird <b>nur vom Client</b> benutzt!
*
* @param szServerAdrress Adresse des Servers
* @param iPort Port des Server
*/
bool Connect(const char *szServerAddress, unsigned short int iPort, bool nonblock);
/** \brief Stellt Verbindsanfage an den Server
*
* Mittels der connect()-Methode stellt der Client
* eine Verbindungsanfrage an den Server her, der
* Die IP wird hier als String &uuml;bergeben
* Wird <b>nur vom Client</b> benutzt!
*
* @param ServerAdrress Adresse des Servers
* @param iPort Port des Server
*/
bool Connect(const std::string ServerAddress, unsigned short int iPort, bool nonblock = false);
void setBlockingMode(bool nonblock);
std::string receiveLine();
int receiveLine(char* array, int arraySize);
/****** CLIENT - METHODEN ENDE ******/
/**
* Die send()-Methode sendet Daten an den verbundenen
* Socket
*
* @param szBuffer zu sendende Nachricht
* @param iBufferLength L&auml;ge der Nachricht
* @param iFlags Flags
*
* @return Anzahl der gesendeten Bytes
*/
int Send(const char *szBuffer, int iBufferLength, int iFlags);
/** \brief Senden eines Strings
*
* Die Methode sendet einen String an den Kommunikationspartner
*
* @param toSend String, der gesendet werden soll
*
* @return Anzahl der gesendeten Bytes
*/
int Send(const std::string toSend);
/** \brief Empf&auml;ngt Characters
*
* @param szBuffer hier wird die Nachricht reingeschrieben
* @param iBufferLength max. L&auml;ge der Nachricht
* @param iFlags Flags
*
* @return Anzahl der gesendeten Bytes
*/
int Recv(char *szBuffer, int iBufferLength, int iFlags);
int Recv (std::string& s);
void Disconnect();
};
#endif