Zum Hauptinhalt springen

SckConnect

SckConnect(alpha1, word2[, int3[, int4[, alpha5[, word6[, alpha7[, alpha8]]]]]]) : handle

Ausführbar von Clients mit grafischer Oberfläche Ausführbar vom Server Ausführbar von Clients mit Programmierschnittstelle Ausführbar von der Web-Schnittstelle Ausführbar vom Druckprozessor Ausführbar von der ODBC-Schnittstelle Ausführbar vom SOA-Service

Socket-Verbindung aufbauen

Details

Mit dieser Anweisung wird eine TCP/IP Verbindung zum Host (alpha1) auf Port (word2) aufgebaut. Der Host kann entweder als IP-Adresse (a.b.c.d) oder als Name angegeben werden. Bei der Verwendung des Namens ist zu beachten, dass dieser auch auf eine IP-Adresse umgesetzt werden kann (normalerweise durch einen DNS-Server). Durch die Verwendung eines Präfixes vor dem Namen kann die Auswahl der IP-Adresse und somit des Protokolls gesteuert werden. Folgende Präfixe können angegeben werden:

  • ip4:: ausschließlich IPv4
  • ip4f:: bevorzugt IPv4, IPv6 wenn es keine IPv4-Adresse gibt
  • ip6:: ausschließlich IPv6
  • ip6f:: bevorzugt IPv6, IPv4 wenn es keine IPv6-Adresse gibt

Wird kein Präfix angegeben, wird automatisch ip4f: verwendet.

Beispiel:

SckConnect('ip6f:www.vectorsoft.de', 80);
info

In der Beispiel-Datenbank "CodeLibrary" befindet sich ein Beispiel zur Kommunikation mit einem FTP-Server.

Durch die Portnummer wird der Service des Socket-Servers spezifiziert. Für viele Protokolle sind bestimmte Portnummern standardisiert:

  • FTP: : 21
  • TELNET: : 23
  • SMTP: : 25
  • HTTP: : 80
  • HTTPS: : 443
  • POP3: : 110

Die Option _SckOptDelay schaltet den Nagle-Algorithmus des TCP/IP-Protokoll-Stacks ein. Damit werden beim Versenden nach Möglichkeit mehrere kleine Datenpakete zu einem größeren Paket zusammengefasst. Dies ist standardmäßig abgeschaltet, da die Verwendung zu einer deutlich höheren Latenz führen kann.

Da die Funktion SckWrite () auch einen gepufferten Modus anbietet, braucht _SckOptDelay nur in Spezialfällen verwendet werden.

Die Option _SckOptDontLinger schaltet den Linger-Modus des TCP/IP-Protokoll-Stacks aus. Dadurch wird bei einem SckClose () nicht mehr auf das Versenden noch eventuell ungesendeter Daten gewartet.

Durch die Optionen _SckTlsMax, _SckTlsHigh, _SckTlsMed und _SckTlsLow kann eine verschlüsselte Socket-Verbindung unter Verwendung der Transport Layer Security aufgebaut werden. Basierend auf dieser Sicherungsschicht kann beispielsweise das HTTPS-Protokoll verwendet werden. Der Verbindungsaufbau erfolgt mit der Angabe von einer dieser Konstanten. Der Aufruf von SckConnect(<Server>,<Port>, _SckTlsMed ) stellt eine verschlüsselte Verbindung zum Server unter Verwendung von SSL 3.0 oder TLS 1.x her, eine unverschlüsselte Verbindung oder die Verwendung von SSL 2.0-Verschlüsselungen wird abgelehnt.

info

Eine Verschlüsselung kann auch nachträglich mit SckStartTls () initiiert werden.

Falls der Server keine akzeptierte Version oder überhaupt keine Verschlüsselung anbietet, liefert SckConnect() den Fehler _ErrSckTlsConnect zurück. Der Fehlerwert kommt auch dann, wenn das TLS-Handshake mit dem Server fehlschlägt. Eine Überprüfung der Gültigkeit des Server-Zertifikats ist derzeit nicht möglich.

Falls der Server Probleme mit den TLS 1.x-Protokollen hat, kann die Option _SckNoTLSv1 mit _SckTlsMed oder _SckTlsLow kombiniert werden, um die Unterstützung auf das Protokoll SSL 3.0 zu beschränken.

Die verwendete TLS-Version kann mit SckInfo (..., _SckVersionTLS ) abgefragt werden.

Soll das serverseitig verwendete Zertifikat überprüft werden, muss die Angabe in (int3) mit _SckOptVerify kombiniert werden. Voraussetzung für eine erfolgreiche Prüfung von Zertifikaten ist eine Sammlung von Stammzertifikaten vertrauenswürdiger Organisationen (root CAs). Diese Sammlung wird als Datei common\ca-bundle.crt im CONZEPT 16-Datenverzeichnis abgelegt. Zur vollständigen Überprüfung muss zusätzlich der "Common Name" in dem Zertifikat mit dem Server-Namen verglichen werden. Der "CN" kann mit der Anweisung SckInfo (..., _SckCertificateCN ) ermittelt werden.

Tritt bei der Überprüfung des Zertifikats ein Fehler auf, liefert der Befehl _ErrSckTlsCertificateVerify zurück. Der Fehlerwert der Überprüfung befindet sich in der Eigenschaft CertificateError des System -Objekts.

Zusätzlich zu den Konstanten _SckTlsMax, _SckTlsHigh, _SckTlsMed und _SckTlsLow kann mit _SckTlsSNI beim Verbindungsaufbau die Server Name Indication (SNI) eingesetzt werden. Wird eine _SckProxy...-Option angegeben, wird der Name des Proxy-Servers (alpha5) verwendet, andernfalls der Hostname (alpha1). Soll sich bei Verwendung eines Proxys SNI auf den normalen Host beziehen, muss SckStartTls () verwendet werden.

Nach dem Aufbau der Verbindung kann diese genauso verwendet werden wie eine unverschlüsselte Verbindung.

Verschlüsselte Socket-Verbindungen können aktuell in folgenden Umgebungen verwendet werden:

  • Standard- und Advanced-Client
  • SOA-Service
  • Programmierschnittstelle
  • Druck-Prozessor

Optional kann in (int4) ein Timeout definiert werden. Dieser Wert (in Millisekunden) wird beim Öffnen, Lesen und Schreiben des Sockets verwendet. Nach Ablauf des Timeouts wird entweder der Fehlerwert _ErrSckConnectFailed (beim Öffnen) oder _ErrTimeout (beim Lesen und Schreiben) zurückgeliefert. Standardmäßig wird ein Timeout von 5000 ms verwendet.

Durch die _SckProxy...-Optionen kann ein SOCKS-Proxyserver verwendet werden, wobei die Versionen 4, 4a und 5 (ohne Authentifizierung) unterstützt werden. Bei Benutzung eines Proxys muss in (alpha5) der Name oder die IP-Adresse des Proxyservers angegeben werden. Der Port des Proxyservers kann optional in (word6) übergeben werden, standardmäßig wird 1080 verwendet. Bei Benutzung von SOCKS v4 (ohne a) ist zu beachten, dass der Host in (alpha1) nur als IP-Adresse angegeben werden kann, da erst ab Version 4a eine Namensauflösung möglich ist.

Benötigt der Proxyserver eine Authentifizierung, kann ein Benutzer und sein Passwort in (alpha7) und (alpha8) angegeben werden.

Mit der Option _SckOptBind wird die Verbindung an die IP-Adresse (alpha5) und / oder den Port (word6) gebunden. Dies ist beispielsweise dann sinnvoll, wenn ein Computer mehrere IP-Adressen hat und bei der Verbindung zu einem anderen Rechner eine bestimmte IP-Adresse, z. B. durch die Firewall, vorausgesetzt wird. Ist kein Port (word6) angegeben, wird automatisch ein freier Port gewählt. Ist ein angegebener Port bereits belegt, wird als Resultat _ErrSckBindFailed zurückgegeben. Kann mit der Quelladresse keine Verbindung zur Zieladresse (alpha1) aufgebaut werden, kommt als Resultat _ErrSckConnectFailed. Dies ist beispielsweise der Fall, wenn sich Quell- und Zieladresse in anderen Subnetzen befinden.

Mögliche Fehlerwerte: