![]() |
Die Klasse TClientSocket ist zu
Programmierung von Anwendungen und Diensten, die auf das UDP
Protokoll aufsetzen, nicht geeignet.
Kurzbeschreibung
Mithilfe der Socket-Komponenten lassen sich Sockets, die in diesen Komponenten gekapselt sind, Delphi-typisch verwenden.
Benutzerschnittstelle der Klasse TClientSocket
Methoden
| constructor Create (AOwner: TComponent); |
| Die Konstruktor Create erzeugt ein Exemplar von TClientSocket zur Laufzeit. TClientSocket-Objekte, die während des Entwurfs in einem Formular platziert wurden, werden automatisch erzeugt. |
| destructor Destroy; |
| Der Destruktor Destroy gibt
ein Exemplar von TClientSocket wieder frei. Die Methode Free
verwendet ebenfalls diesen Destruktor. Free überprüft,
ob der Client-Socket
nicht bereits nil ist und ruft Destroy nur bei Bedarf
auf. |
| procedure Open; |
| Die Methode Open öffnet die Socket-Verbindung und initialisiert sie. Die Eigenschaft Active wird dabei auf True gesetzt. Der Client-Socket sucht dann nach einem Server und übernimmt den Verbindungsaufbau. |
| procedure Close; |
| Die Methode Close schließt die Socket-Verbindung. Rufen Sie Close auf, um die Socket-Verbindung zu schließen. Close setzt die Eigenschaft Active auf False. |
| Eigenschaft |
Typ |
Beschreibung |
|
| x |
Active | Boolean |
gibt an,
ob die
Socket-Verbindung geöffnet und für die Kommunikation mit anderen
Systemen verfügbar ist. |
| Address |
string |
bezeichnet die IP Adresse des Server-Systems. Address ist ein String aus vier numerischen (Byte-) Werten, die durch Punkte voneinander getrennt werden. Beispiel: 123.197.1.2 . Wenn der Socket die Eigenschaft Host definiert, wird die Adresse für die Verbindung nicht aus der Eigenschaft Address, sondern aus der IP Adresse übernommen, die mit Host gekoppelt ist. Diese zweite Variante ist schneller, da der Socket nicht erst nach der IP-Adresse suchen muss. | |
| ClientType |
legt fest, ob der Client-Windows-Socket Informationen über die Socketverbindung asynchron liest und schreibt. | ||
| x |
Host |
ist ein Alias für die IP Adresse des Server-Systems. Wenn der Socket eine Verbindung öffnet, sucht er mit Hilfe des Wertes von Host nach der IP Adresse für den Serversocket. | |
| x |
Name |
string |
gibt den Namen der Komponente im Formular an. |
| x |
Port |
Integer |
enthält die ID, die zur Bezeichnung der Server-Socketverbindung benutzt wird. Client und Server benötigen für eine Verbindung den selben Port. Standarddiensten, z.B. Chat, E-Mail etc. , sind feste Port-Nummern zugeordnet. |
| Service |
string |
bezeichnet den Namen des Dienstes, für den die Socketverbindung eingesetzt wird. Verwenden Sie Service, um auf den Verwendungszweck der Verbindung hinzuweisen. Windows stellt eine Anzahl von Namen für Standard-Dienste bereit, z.B. ftp, http, finger und time. | |
| Tag |
Integer |
speichert eine Ganzzahl als Teil der Komponente. Diese Zahl wird intern nicht verwendet und bietet dem Programmentwickler eine Speicherstelle zur freien Verfügung. |
Eigenschaften zur Laufzeit
| Eigenschaft |
Beschreibung |
|
| x |
Socket | Mithilfe der Eigenschaft (Property) Socket wird eine Client-Socketverbindung zur Laufzeit des Programms verwaltet. Durch diese Eigenschaft wird ein Objekt der Klasse TClientWinSocket verfügbar, das die Funktionalität eines Clientsockets kapselt, und wiederum Eigenschaften und Methoden besitzt. |
Socket: Gemeinsame Eigenschaften von TServerWinSocket und von TClientWinSocket
| Eigenschaft |
Typ |
Beschreibung |
|
| x |
Connected |
Boolean |
gibt an, ob die Socketverbindung geöffnet ist und für die Kommunikation zur Verfügung
steht. |
| x |
LocalAdress |
string |
gibt die IP Adresse des
Systems an. |
| x |
LocalHost |
string |
enthält den Namen des Systems, in dem die Anwendung ausgeführt wird, die den Windows-Socket verwendet. |
| x |
LocalPort |
Integer |
gibt die ID Nummer des von dem Socket verwendeten Ports an |
| LookupState |
gibt an, ob während des Öffnens der Verbindung asynchrone Aktivitäten auftreten. | ||
| x |
RemoteAdress | string |
legt die IP Adresse des lokalen Systems fest, das mit der Socketverbindung verbunden ist |
| x |
RemodeHost |
string |
enthält den Namen des Systems am anderen Ende der Socketverbindung. |
| x |
RemodePort |
Integer |
gibt die ID Nummer des vom entfernten System (RemoteHost) für die Socketverbindung verwendeten Ports an. |
| SocketHandle |
gibt das Windows-Handle für
den Socket an. |
Socket: Spezielle Eigenschaften von TClientWinSocket
| Eigenschaft |
Beschreibung |
|
| |
ClientType | legt fest, ob der Client-Windows-Socket Informationen über die Socket-Verbindung asynchron liest und schreibt. |
Socket: Methoden von TClientWinSocket (Auszug)
| function SendText (const S: string): Integer; |
| Schreibt eine Zeichenkette (String) in die Socketverbindung. |
| function ReceiveText: string; |
| Liest eine Zeichenkette (String) aus der Socketverbindung. |
| function SendBuf (var Buf; Count: Integer): Integer; |
| Schreibt einen beliebigen,
unstrukturierten, nicht typisierten Datenbereich Buf (=
'Buffer') in die Socketverbindung. Bei der Datenübertragung ist immer
die Länge Count der Daten (= Anzahl Bytes) anzugeben, damit
der Empfänger weiß wie groß die Datenmenge ist. |
| function ReceiveBuf (var Buf; Count: Integer): Integer; |
| Liest einen beliebigen, unstrukturierten, nicht typisierten Datenbereich Buf (= 'Buffer') der Länge Count (Bytes) aus der Socketverbindung. |
Die Kommunikation zwischen den Socket-Komponenten erfolgt ereignisgesteuert. Schließlich kann ein Socket ja nicht im Voraus 'wissen', wann ein anderer Socket eine Verbindung aufbauen oder Daten austauschen möchte.
Ereignisse für den Verbindungsaufbau und Verbindungsabbau:
| property OnLookup |
| Das Ereignis OnLookup tritt ein , wenn ein Clientsocket nach dem Serversocket sucht, zu dem die Verbindung hergestellt werden soll. |
| property OnConnect |
| Das Ereignis OnConnect tritt für Clientsockets ein, wenn die Verbindung zum Server geöffnet wurde. In einer Behandlungsroutine für das Ereignis OnConnect eines Clientsocket können Sie Aktionen festlegen, die nach dem Aufbau der Verbindung zu einem Serversocket ausgeführt werden. |
| property OnConnecting |
| Das Ereignis OnConnecting tritt für einen Clientsocket ein, nachdem der Serversocket lokalisiert wurde, aber bevor die Verbindung aufgebaut wird. In einer Behandlungsroutine für das Ereignis OnConnecting eines Clientsocket können Sie Aktionen festlegen, die direkt vor dem Aufbau der Verbindung zu einem Serversocket ausgeführt werden. |
| property OnConnect |
| Das Ereignis OnConnect tritt für einen Clientsocket ein, wenn die Verbindung zum Server geöffnet wurde. In einer Behandlungsroutine für das Ereignis OnConnect eines Clientsocket können Sie Aktionen festlegen, die nach dem Aufbau der Verbindung zu einem Serversocket ausgeführt werden. |
| property OnDisconnect |
| Das Ereignis OnDisconnect tritt direkt vor dem Schließen der Verbindung zu einem Serversocket durch den Clientsocket ein. In einer Behandlungsroutine für das Ereignis OnDisconnect können Sie Aktionen festlegen, die ausgeführt werden, kurz bevor die Verbindung zu einem Serversocket beendet wird. OnDisconnect tritt ein, nachdem die Eigenschaft Active auf False gesetzt wurde, aber bevor die Verbindung tatsächlich geschlossen wird. |
| property OnRead |
| Das Ereignis OnRead tritt ein, wenn ein Clientsocket Informationen aus der Socket-Verbindung lesen soll. Schreiben Sie eine Behandlungsroutine für das Ereignis OnRead, um aus der Socket-Verbindung zu lesen. |
| property OnWrite |
| Das Ereignis OnWrite tritt
ein, wenn ein Clientsocket Informationen in
die Socketverbindung schreiben soll. Schreiben Sie eine
Behandlungsroutine für das Ereignis OnWrite, um in
die Socketverbindung zu schreiben. |
| property OnError |
| Das Ereignis OnError tritt ein, wenn der Socket eine Verbindung nicht herstellen, benutzen oder schließen kann. In einer Behandlungsroutine für OnError können Sie auf Fehler reagieren, die in Zusammenhang mit einer Socketverbindung auftreten. Wenn die Ereignisbehandlungsroutine für OnError die Fehlerbedingung erfolgreich behandeln konnte, setzen Sie den Parameter ErrorCode auf 0, damit keine ESocketError-Exception ausgelöst wird. |
Einige Hinweise zur inneren Struktur der
Komponente TClientSocket
Die Klasse TClientSocket ist als Delphi-Komponente eine Unterklasse von TComponent. Socket-Komponenten besitzen also alle Merkmale von Komponenten, z. B. die Eigenschaft Name, aber auch eine Komponentenliste (Eigenschaft Components) zur Verwaltung weiterer, untergeordneter Komponenten.

(Abb. Klassenhiearchie der Socket-Komponenten)
Aktive Client-Socket-Objekte stellen ein Socket-Objekt für die Verbindungsaufnahme des Clients mit einem Server zur Verfügung. Die
gesamte Verwaltung
dieser Sockets übernimmt ein Objekt der Klasse TClientWinSocket.
Die Kommunikation zwischen Verwaltungsobjekt und Komponente übernimmt
die Eigenschaft Socket.

(Abb. WinSocket-Klassen kapseln Sockets)
Der Verbindungs-Socket wird in dem internen Attribut FSocket:
TClientWinSocket verwaltet, für die "Kommunikatons-Sockets"
existiert das Attribut FConnections: TList, das über die
Eigenschaft Connections administriert wird.

Sowohl die Komponente TClientSocket als auch die Klasse TClientWinSocket sind also Endpunkte eine Hierarchie von Klassen. Die Definition der hier beschriebenen Benutzerschnittstellen und Zusammenhänge verteilt sich auf diese verschiedenen Oberklassen.
(Hinweis in eigener Sache: Eine Quelle, die diesen Sachverhalt weiter erläutert, haben wir nicht gefunden. Dem Interessenten, der die Zusammenhänge noch genauer kennen lernen möchte (z. B. die interne Verwendung von Threads in den Socket-Objekten), bleibt daher wohl nicht anderes übrig als die Implementierung dieser Klassen im Quelltext zu analysieren (Datei SktComp.pas, Bestandteil der Professional-Versionen von Delphi 5 und höher).