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
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ö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 ü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ä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ängt Characters
|
|
*
|
|
* @param szBuffer hier wird die Nachricht reingeschrieben
|
|
* @param iBufferLength max. Lä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
|