kopf
brlogo
fensterobenrechts
   
   
fensteruntenblau
   
 
header
 

bt_backward   bt_index   bt_forward

Datenaustausch zwischen Sockets

 

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.

 

datenaustausch_10

 

 

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:

  • Informationen über die aktuell auf dem Serversocket aktiven Verbindungen abrufen.
  • Informationen über die Verbindungs-Threads abrufen, die zur Verwendung durch den Serversocket zwischengespeichert sind.
  • Zugriff auf das Windows-Socket-Handle der empfangenden Verbindung, das für Aufrufe der Windows-Socket-API benötigt wird.

 

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.
   x  = wichtige Eigenschaft in diesem Zusammenhang

 

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.
 

Die Funktionen SendText, ReceiveText, SendBuf und ReceiveBuf können 'Turbo-Pascal-typisch" auch prozedural verwendet werden. Als Funktion liefern sie über ihren  Funktionswert die Anzahl der tatsächlich übertragenen Bytes oder den Wert -1, falls keine Übertragung stattfand.

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 verbundenprocedure 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
 

 

IcoDelphi7_36  Download Programm Kontakt3  (Delphi 7):  Kontakt3.zip

 

  bt_top  

 


(FvSG 30.1.2006)

 

 
 
Friday, 24. November 2017 / 21:26:19