|
| Patrick's Programming Library Version 7.0.0 - Dokumentation |
TCP-Socket-Klasse. Mehr ...
Öffentliche Methoden | |
| TCPSocket () | |
| Konstruktor der Klasse. Mehr ... | |
| virtual | ~TCPSocket () |
| Destruktor der Klasse. Mehr ... | |
TCP-Client functions | |
| void | setSource (const String &interface_name, int port=0) |
| Quell-Interface und Port festlegen. Mehr ... | |
| void | connect (const String &host_and_port) |
| Verbindung aufbauen. Mehr ... | |
| void | connect (const String &host, int port) |
| Verbindung aufbauen. Mehr ... | |
| void | setTimeoutConnect (int seconds, int useconds) |
| Timeout für Connect-Funktion definieren. Mehr ... | |
| bool | isConnected () const |
| Prüfen, ob eine Verbindung besteht. Mehr ... | |
TCP-Server functions | |
| void | bind (const String &host, int port) |
| Socket auf eine IP-Adresse und Port binden. Mehr ... | |
| virtual int | receiveConnect (TCPSocket *socket, const String &host, int port) |
| Eingehende Verbindung verarbeiten. Mehr ... | |
| bool | isListening () const |
| Prüfen, ob der Socket auf eingehende Verbindungen wartet. Mehr ... | |
| void | stopListen () |
| TCP-Server anhalten. Mehr ... | |
| void | signalStopListen () |
| TCP-Server signalisieren, dass er stoppen soll. Mehr ... | |
| void | listen (int backlog=64, int timeout=100) |
| Server starten und auf eingehende Verbindung warten. Mehr ... | |
Common functions for client and server | |
| void | setTimeoutRead (int seconds, int useconds) |
| Lese-Timeout festlegen. Mehr ... | |
| void | setTimeoutWrite (int seconds, int useconds) |
| Schreib-Timeout festlegen. Mehr ... | |
| void | disconnect () |
| Verbindung trennen. Mehr ... | |
| void | shutdown () |
| Verbindung trennen. Mehr ... | |
| size_t | write (const String &str, size_t bytes=0) |
| size_t | write (const WideString &str, size_t bytes=0) |
| size_t | write (const ByteArrayPtr &bin, size_t bytes=0) |
| size_t | write (const void *buffer, size_t bytes) |
| Daten schreiben. Mehr ... | |
| size_t | writef (const char *fmt,...) |
| size_t | write (const SocketMessage &msg) |
| Nachricht verschicken. Mehr ... | |
| size_t | read (void *buffer, size_t bytes) |
| Daten lesen. Mehr ... | |
| size_t | read (String &buffer, size_t bytes) |
| size_t | read (ByteArray &buffer, size_t bytes) |
| int | getDescriptor () |
| Descriptor des Sockets auslesen. Mehr ... | |
| void | setBlocking (bool value) |
| Bei Lesezugriffen blockieren. Mehr ... | |
| bool | isWriteable () |
| Prüfen, ob Daten auf den Socket geschrieben werden können. Mehr ... | |
| bool | isReadable () |
| Prüfen, ob Daten vom Socket gelesen werden können. Mehr ... | |
| bool | waitForIncomingData (int seconds, int useconds) |
| Auf eingehende Daten warten. Mehr ... | |
| bool | waitForOutgoingData (int seconds, int useconds) |
| Warten, bis der Socket beschreibbar ist. Mehr ... | |
| SockAddr | getSockAddr () const |
| SockAddr | getPeerAddr () const |
SSL Encryption | |
| void | sslStart (SSLContext &context) |
| SSL-Kommunikation starten. Mehr ... | |
| void | sslStop () |
| SSL-Kommunikation stoppen. Mehr ... | |
| int | sslCheckCertificate (const ppl7::String &name, bool AcceptSelfSignedCert=false) |
| void | sslAccept (SSLContext &context) |
| Auf eine TLS/SSL-Handshake warten. Mehr ... | |
| int | sslWaitForAccept (int timeout=0) |
TODO | |
| bool | waitForMessage (SocketMessage &msg, int timeout_seconds=0, Thread *watch_thread=NULL) |
| Auf Nachricht warten. Mehr ... | |
Private Methoden | |
SSL-Verschlüsselung | |
Die nachfolgenden Befehle werden benötigt, wenn die Kommunikation zwischen Client und Server mit SSL verschlüsselt werden soll. Voraussetzung dafür ist, dass die PPL-Library mit OpenSSL-Unterstützung kompiliert wurde. | |
| int | SSL_Write (const void *buffer, int size) |
| Verschlüsselte Daten schreiben. Mehr ... | |
| int | SSL_Read (void *buffer, int bytes) |
| Verschlüsselte Daten lesen. Mehr ... | |
Private Attribute | |
| int | connect_timeout_sec |
| int | connect_timeout_usec |
| bool | connected |
| String | HostName |
| bool | islisten |
| Mutex | mutex |
| int | PortNum |
| void * | socket |
| String | SourceInterface |
| int | SourcePort |
| void * | ssl |
| SSLContext * | sslcontext |
| bool | stoplisten |
Socket-Klasse für TCP-Verbindungen.
| ppl7::TCPSocket::TCPSocket | ( | ) |
|
virtual |
| void ppl7::TCPSocket::bind | ( | const String & | host, |
| int | port | ||
| ) |
host die IP-Adresse festgelegt, auf die sich der Server binden soll und mit port der TCP-Port. Es ist nicht möglich einen Socket auf mehrere Adressen zu binden.| [in] | host | IP-Adresse, Hostname oder "*". Bei Angabe von "*" bindet sich der Socket auf alle Interfaces des Servers. |
| [in] | port | Der gewünschte TCP-Port |
| OutOfMemoryException | |
| ResolverException | |
| SettingSocketOptionException | |
| CouldNotBindToInterfaceException | |
| CouldNotOpenSocketException |
| void ppl7::TCPSocket::connect | ( | const String & | host_and_port | ) |
| host | Der Parameter host_and_port muss das Format "hostname:port" haben, wobei "hostname" auch eine IP-Adresse sein kann. Der Port kann entweder als Zahl oder als Servicename angegeben werden, z.B. "smtp" für Port 25. |
| IllegalArgumentException | Wird geworfen, wenn der Parameter host_and_port keinen Wert oder keinen oder mehr als einen Doppelpunkt enthält |
| IllegalPortException | wird geworfen, wenn der angegebene Port oder Servicename ungültig ist. |
| void ppl7::TCPSocket::connect | ( | const String & | host, |
| int | port | ||
| ) |
| [in] | host | Der Hostname oder die IP-Adresse des Zielrechners |
| [in] | port | Der gewünschte Zielport |
| IllegalArgumentException | Wird geworfen, wenn einer der beiden Parameter keinen oder einen ungültigen Wert enthält |
| IllegalPortException | wird geworfen, wenn der angegebene Port ungültig ist. |
| void ppl7::TCPSocket::disconnect | ( | ) |
| int ppl7::TCPSocket::getDescriptor | ( | ) |
| NotConnectedException | Wird geworfen, wenn kein Socket geöffnet ist |
| SockAddr ppl7::TCPSocket::getPeerAddr | ( | ) | const |
| SockAddr ppl7::TCPSocket::getSockAddr | ( | ) | const |
| bool ppl7::TCPSocket::isConnected | ( | ) | const |
| bool ppl7::TCPSocket::isListening | ( | ) | const |
| bool ppl7::TCPSocket::isReadable | ( | ) |
| Diverse | Im Fehlerfall wird eine Exception geworfen |
| bool ppl7::TCPSocket::isWriteable | ( | ) |
| Diverse | Im Fehlerfall wird eine Exception geworfen |
| void ppl7::TCPSocket::listen | ( | int | backlog = 64, |
| int | timeout = 100 |
||
| ) |
timeout Millisekunden wird jedoch geprüft, ob die Funktion sich beenden soll. Dies wird durch Aufruf der Funktion CTCPSocket::SignalStopListen oder CTCPSocket::StopListen signalisiert.| [in] | backlog | The backlog argument defines the maximum length to which the queue of pending connections for sockfd may grow. If a connection request arrives when the queue is full, the client may receive an error with an indication of ECONNREFUSED or, if the underly‐ ing protocol supports retransmission, the request may be ignored so that a later reattempt at connection succeeds. |
| [in] | timeout | Intervall in Millisekunden, nachdem geprüpft werden soll, ob weiter auf eingehende Verbindungen gewartet werden soll. Je niedriger der Wert, desto schneller wird auf einen Stop-Befehl reagiert, jedoch steigt dadurch auch die CPU-Auslastung. Der Default ist 100 Millisekunden (1000 Millisekunden = 1 Sekunde). |
| size_t ppl7::TCPSocket::read | ( | void * | buffer, |
| size_t | bytes | ||
| ) |
bytes vom Socket in den von der Anwendung angegebenen Puffer buffer zu lesen. Falls der Socket auf "blocking" eingestellt ist (=Default) wartet die Funktion solange, bis die ersten Daten eingegangen sind und liefert diese zurück. Ist der Socket auf "non blocking" eingestellt, kehrt die Funktion sofort zurück, wenn keine Daten zur Verfügung stehen. Die Anzahl tatsächlich gelesener Bytes wird als Rückgabewert zurückgegeben.| [in] | buffer | Speicherbereich, in dem die gelesenen Daten abgelegt werden sollen. Dieses muss gross genug sein, um die erwartete Anzahl Bytes aufnehmen zu können. |
| [in] | bytes | Anzahl zu lesender Bytes |
| size_t ppl7::TCPSocket::read | ( | String & | buffer, |
| size_t | bytes | ||
| ) |
| size_t ppl7::TCPSocket::read | ( | ByteArray & | buffer, |
| size_t | bytes | ||
| ) |
| [in] | socket | Pointer auf eine neue Socket-Klasse, die die eingegangene Verbindung repräsentiert. Die Anwendung muss die Klasse nach Verbindungsende selbst mit "delete" löschen. |
| [in] | host | Hostname oder IP der Gegenstelle |
| [in] | port | TCP-Port der Gegenstelle |
| void ppl7::TCPSocket::setBlocking | ( | bool | value | ) |
| [in] | value | Der Wert "true" setzt den Socket in den Blocking-Modus, was auch der Default ist. Durch den Wert "false" wird er in den Non-Blocking-Modus gesetzt. |
| Diverse |
| void ppl7::TCPSocket::setSource | ( | const String & | interface, |
| int | port = 0 |
||
| ) |
| [in] | interface | Hostname oder IP-Adresse des Quellinterfaces. Bleibt der Parameter leer, wird nur der port beachtet |
| [in] | port | Port-Nummer des Quellinterfaces. Wird 0 angegeben, wird nur das interface beachtet |
host oder port definiert wurden, wird die Connect-Funktion fehlschlagen!| void ppl7::TCPSocket::setTimeoutConnect | ( | int | seconds, |
| int | useconds | ||
| ) |
| [in] | seconds | Anzahl Sekunden |
| [in] | useconds | Anzahl Mikrosekunden (1000 Mikrosekunden=1 Millisekunde, 1000 Millisekunden = 1 Sekunde) |
| void ppl7::TCPSocket::setTimeoutRead | ( | int | seconds, |
| int | useconds | ||
| ) |
Mit dieser Funktion kann ein Timeout für Lesezugriffe gesetzt werden. Normalerweise blockiert eine Leseoperation mit "Read" solange, bis die angeforderten Daten eingegangen sind (ausser der Socket wurde mit TCPSocket::setBlocking auf "Non-Blocking" gesetzt). Mit dieser Funktion kann jedoch ein beliebiger mikrosekunden genauer Timeout festgelegt werden. Der Timeout errechnet sich dabei aus seconds + useconds.
seconds und useconds aufgerufen werden.| [in] | seconds | Anzahl Sekunden |
| [in] | useconds | Anzahl Mikrosekunden (1000000 Mikrosekunden = 1 Sekunde) |
| NotConnectedException | |
| InvalidSocketException | |
| BadFiledescriptorException | |
| UnknownOptionException | |
| BadAddressException | |
| InvalidArgumentsException |
| void ppl7::TCPSocket::setTimeoutWrite | ( | int | seconds, |
| int | useconds | ||
| ) |
Mit dieser Funktion kann ein Timeout für Schreibzugriffe gesetzt werden. Normalerweise blockiert eine Schreiboperation mit "Write" solange, bis alle Daten gesendet wurden. Mit dieser Funktion kann jedoch ein beliebiger mikrosekunden genauer Timeout festgelegt werden. Der Timeout errechnet sich dabei aus seconds + useconds.
seconds und useconds aufgerufen werden.| [in] | seconds | Anzahl Sekunden |
| [in] | useconds | Anzahl Mikrosekunden (1000000 Mikrosekunden = 1 Sekunde) |
| NotConnectedException | |
| InvalidSocketException | |
| BadFiledescriptorException | |
| UnknownOptionException | |
| BadAddressException | |
| InvalidArgumentsException |
| void ppl7::TCPSocket::shutdown | ( | ) |
| void ppl7::TCPSocket::signalStopListen | ( | ) |
|
private |
size verschlüsselte Bytes von der Gegenstelle in den bereits allokierten Speicherbereich buffer und entschlüsselt sie dabei.| [in] | buffer | Bereits allokierter Speicherbereich, in den die gelesenen Daten geschrieben werden sollen |
| [in] | size | Anzahl zu lesender Bytes. |
| SSLException | wird geworfen, wenn ein Fehler aufgetreten ist |
|
private |
size Bytes aus dem Speicherbereich buffer verschlüsselt an die Gegenstelle.| [in] | buffer | Beginn des zu sendenden Speicherbereichs |
| [in] | size | Anzahl zu sendender Bytes. |
| SSLException | wird geworfen, wenn ein Fehler aufgetreten ist |
| void ppl7::TCPSocket::sslAccept | ( | SSLContext & | context | ) |
| int ppl7::TCPSocket::sslCheckCertificate | ( | const ppl7::String & | name, |
| bool | AcceptSelfSignedCert = false |
||
| ) |
| void ppl7::TCPSocket::sslStart | ( | SSLContext & | context | ) |
| Diverse | Falls die SSL-Kommunikation nicht gestartet werden kann, wird eine Exception geworfen |
| void ppl7::TCPSocket::sslStop | ( | ) |
| Keine | Durch Aufruf dieser Funktion wird keine Exception geworfen. |
| int ppl7::TCPSocket::sslWaitForAccept | ( | int | timeout = 0 | ) |
| void ppl7::TCPSocket::stopListen | ( | ) |
| bool ppl7::TCPSocket::waitForIncomingData | ( | int | seconds, |
| int | useconds | ||
| ) |
seconds und useconds angegebene Zeitspanne. Falls seconds und useconds Null sind, und keine Daten bereitstehen, kehrt die Funktion sofort zurück.| [in] | seconds | Anzahl Sekunden, die gewartet werden soll |
| [in] | useconds | Anzahl Mikrosekunden, die gewartet werden soll |
| Diverse |
| bool ppl7::TCPSocket::waitForMessage | ( | SocketMessage & | msg, |
| int | timeout_seconds = 0, |
||
| Thread * | watch_thread = NULL |
||
| ) |
Mit der Klasse ppl6::CpplSocketMessage und den Funktionen CpplSocket::Write und CpplSocket::WaitForMessage lassen sich bequem Nachrichten per TCP austauschen.
Jedes Nachrichtenpaket besteht dabei aus einem Header und den Nutzdaten.
Die CRC-Summe wird über die ersten 16 Byte des Headers gebildet (siehe ppl6::crc32). Alle mehrbyteigen Werte müssen in Network-Byte-Order (Big Endian) angegeben werden.
| bool ppl7::TCPSocket::waitForOutgoingData | ( | int | seconds, |
| int | useconds | ||
| ) |
seconds und useconds angegebene Zeitspanne. Falls seconds und useconds Null sind, und keine Daten gesendet werden können, kehrt die Funktion sofort zurück.| [in] | seconds | Anzahl Sekunden, die gewartet werden soll |
| [in] | useconds | Anzahl Mikrosekunden, die gewartet werden soll |
| Diverse |
| size_t ppl7::TCPSocket::write | ( | const String & | str, |
| size_t | bytes = 0 |
||
| ) |
| size_t ppl7::TCPSocket::write | ( | const WideString & | str, |
| size_t | bytes = 0 |
||
| ) |
| size_t ppl7::TCPSocket::write | ( | const ByteArrayPtr & | bin, |
| size_t | bytes = 0 |
||
| ) |
| size_t ppl7::TCPSocket::write | ( | const void * | buffer, |
| size_t | bytes | ||
| ) |
bytes Bytes aus dem Speicherbereich buffer an die Gegenstelle gesendet.| [in] | buffer | Pointer auf die zu sendenden Daten |
| [in] | bytes | Anzahl zu sendender Bytes |
| size_t ppl7::TCPSocket::write | ( | const SocketMessage & | msg | ) |
Mit der Klasse ppl6::CpplSocketMessage und den Funktionen CpplSocket::Write und CpplSocket::WaitForMessage lassen sich bequem Nachrichten per TCP austauschen.
Jedes Nachrichtenpaket besteht dabei aus einem Header und den Nutzdaten.
Die CRC-Summe wird über die ersten 16 Byte des Headers gebildet (siehe ppl6::crc32). Alle mehrbyteigen Werte müssen in Network-Byte-Order (Big Endian) angegeben werden.
| size_t ppl7::TCPSocket::writef | ( | const char * | fmt, |
| ... | |||
| ) |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |
|
private |