![]() |
Programm Kontakt3
Im Programm Kontakt3 steht der Datenaustausch zwischen
Sockets im Vordergrund. Es ist eine Erweiterung von Programm
Kontakt1. In zwei weiteren Memo-Feldern MemEmpfang und MemNachrichten
werden die gesendete und die empfangene Nachricht protokolliert,
das Client-Fenster besitzt zusätzlich eine Schaltfläche BtSenden.
Der Server arbeitet als Echo-Server, indem er alle eingehenden
Nachrichten an den Empfänger als Echo zurücksendet.

Ereignisse und Methoden für den Datenaustausch
Auch der Datenaustausch zwischen den Socket-Komponenten erfolgt ereignisgesteuert. Schließlich kann ein Socket ja nicht im Voraus 'wissen', wann ein anderer Socket über ihn Daten austauschen möchte. Ist die Verbindung zwischen Sockets hergestellt, treten nun in unregelmäßigen Abständen weitere Ereignisse auf, insbesondere:
für die Clientsocket-Komponente| Ereignis |
Das Ereignis tritt ein |
| OnRead | wenn ein Clientsocket Informationen aus der Socketverbindung lesen kann. |
für die Serversocket-Komponente
| Ereignis | Das Ereignis tritt ein |
| OnClientRead | wenn der Serversocket Informationen aus dem Clientsocket lesen kann. |
Die Socket-Komponenten reagieren auf diese Ereignisse, indem Sie
über die bestehende Socketverbindung mithilfe der Eigenschaft Socket
Daten senden oder empfangen.
Die Eigenschaft Socket
Sowohl die Serversocket- als auch die Clientsocket-Komponente
besitzen zusätzlich zur Laufzeit des Programms noch die Eigenschaft
(Property) Socket. Diese Eigenschaft dient folgenden Zwecken:
Mithilfe der Eigenschaft Socket werden Objekte der Klasse TClientWinSocket
bzw. TServerWinSocket verfügbar
gemacht, die die Merkmale von Windows-Sockets als Klassen
bereitstellen. Ein detaillierte Betrachtung dieser Klassen ist hier
nicht notwendig, besteht doch Aufgabe dieser Klassen gerade darin, die
technische Realisierung von Sockets gemäß dem WinSock-API vom Benutzer
eines Sockets fernzuhalten.
Eigenschaften der Property Socket (Auszug)
| Eigenschaft | Beschreibung | |
| Connected | gibt an, ob die Socketverbindung geöffnet ist und für die Kommunikation zur Verfügung steht. | |
| x | LocalAdress | legt die IP Adresse des lokalen Systems fest, das mit der Socketverbindung verbunden ist |
| x | LocalHost | gibt den Namen des lokalen Systems an |
| x | LocalPort | gibt die ID Nummer des von dem Socket verwendeten Ports an |
| x | RemoteAdress | gibt die IP Adresse des Remote-Systems in der Socketverbindung an |
| x | RemodeHost | gibt den Namen des entfernten Systems an |
| x | RemotePort | gibt die ID Nummer des vom entfernten System (RemoteHost) für die Socketverbindung verwendeten Ports an. |
Methoden der Property Socket (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. |
Detailliertere Informationen zur Eigenschaft Socket finden
sich in der Hilfedatei von Delphi sowie in der Beschreibung der Klassen
TServerSocket und TClientSocket (hier an anderer
Stelle).
Datenaustausch
Die folgenden Ereignis-Methoden zu den Ereignissen Client.OnRead
und Server.OnClientRead verdeutlichen den Datenaustausch
zwischen den Sockets.
// Zustand: Über ClientSocket mit einem Serversocket verbunden procedure TFrmClient.BtSendenClick(Sender: TObject); begin ClientSocket.Socket.SendText (EdSenden.Text); end; |
Nachricht an Server |
procedure TFrmServer.ServerSocketClientRead (Sender: TObject; Socket: TCustomWinSocket);
var Nachricht: string;
begin
Nachricht := Socket.ReceiveText;
MemNachricht.Lines.Add (Nachricht);
Socket.SendText ('Echo: ' + Nachricht);
end;
|
Reaktion des Servers: Nachricht zwischenspeichern, ausgeben und zurückschicken |
procedure TFrmClient.ClientSocketRead (Sender: TObject; Socket: TCustomWinSocket); begin MemNachricht.Lines.Add (Socket.ReceiveText) end; |
Reaktion des Clients: Echo anzeigen |
Download Programm Kontakt3 (Delphi 7):
Kontakt3.zip