Computerwissenschaften

So tauschen Sie Daten über ein Netzwerk mit Delphi aus

So tauschen Sie Daten über ein Netzwerk mit Delphi aus

Von allen Komponenten, die  Delphi zur Unterstützung von Anwendungen bereitstellt, die Daten über ein Netzwerk austauschen (Internet, Intranet und lokal), sind zwei der häufigsten  TServerSocket und TClientSocket , die beide Lese- und Schreibfunktionen über TCP / unterstützen. IP-Verbindung.

 

Winsock- und Delphi-Socket-Komponenten

Windows Sockets (Winsock) bietet eine offene Schnittstelle für die Netzwerkprogrammierung unter dem Windows-Betriebssystem. Es bietet eine Reihe von Funktionen, Datenstrukturen und zugehörigen Parametern, die für den Zugriff auf die Netzwerkdienste von Protokollstapeln erforderlich sind. Winsock fungiert als Verbindung zwischen Netzwerkanwendungen und zugrunde liegenden Protokollstapeln.

Delphi-Socket-Komponenten (Wrapper für den Winsock) optimieren die Erstellung von Anwendungen, die über TCP / IP und verwandte Protokolle mit anderen Systemen kommunizieren. Mit Sockets können Sie Verbindungen zu anderen Computern lesen und überschreiben, ohne sich um die Details der zugrunde liegenden Netzwerksoftware kümmern zu müssen.

Die Internetpalette in der Symbolleiste der Delphi-Komponenten enthält die Komponenten TServerSocket und TClientSocket sowie TcpClient , TcpServer  und TUdpSocket .

Um eine Socket-Verbindung mit einer Socket-Komponente zu starten, müssen Sie einen Host und einen Port angeben. Im Allgemeinen gibt der Host einen Alias ​​für die IP-Adresse des Serversystems an. Port gibt die ID-Nummer an, die die Server-Socket-Verbindung identifiziert.

 

Ein einfaches Einwegprogramm zum Senden von Text

Um ein einfaches Beispiel mit den von Delphi bereitgestellten Socket-Komponenten zu erstellen, erstellen Sie zwei Formulare – eines für den Server und eines für den Client-Computer. Die Idee ist, den Clients zu ermöglichen, einige Textdaten an den Server zu senden.

Öffnen Sie Delphi zunächst zweimal und erstellen Sie ein Projekt für die Serveranwendung und eines für den Client.

 

Serverseite:

Fügen Sie in ein Formular eine TServerSocket-Komponente und eine TMemo-Komponente ein. Fügen Sie im OnCreate-Ereignis für das Formular den nächsten Code hinzu:

Prozedur TForm1.FormCreate (Absender: TObject); 
begin
 ServerSocket1.Port:=23; 
ServerSocket1.Active:=True; 
Ende ;

Das OnClose- Ereignis sollte Folgendes enthalten:

Prozedur TForm1.FormClose 
(Absender: TObject; var Aktion: TCloseAction); 
begin
 ServerSocket1.Active:=false; 
Ende ;

Kundenseite:

Fügen Sie für die Clientanwendung einem Formular eine TClientSocket-, TEdit- und TButton-Komponente hinzu. Geben Sie den folgenden Code für den Client ein:

Prozedur TForm1.FormCreate (Absender: TObject); 
begin
 ClientSocket1.Port:=23; 
 // lokale TCP / IP-Adresse des Servers
 ClientSocket1.Host:='192.168.167.12'; 
ClientSocket1.Active:=true; 
Ende ; 
Prozedur TForm1.FormClose (Absender: TObject; var Aktion: TCloseAction); 
begin
 ClientSocket1.Active:=false; 
Ende ; 
Prozedur TForm1.Button1Click (Absender: TObject); 
beginif ClientSocket1.Active dann
 ClientSocket1.Socket.SendText (Edit1.Text); 
Ende ;

Der Code beschreibt sich selbst: Wenn ein Client auf eine Schaltfläche klickt, wird der in der Edit1-Komponente angegebene Text mit der angegebenen Port- und Hostadresse an den Server gesendet.

Zurück zum Server:

Der letzte Schliff in diesem Beispiel besteht darin, dem Server eine Funktion bereitzustellen, mit der er die vom Client gesendeten Daten „sehen“ kann. Das Ereignis, an dem wir interessiert sind, ist OnClientRead. Es tritt auf, wenn der Server-Socket Informationen von einem Client-Socket lesen soll.

Prozedur TForm1.ServerSocket1ClientRead (Absender: TObject; 
Socket: TCustomWinSocket); 
begin
 Memo1.Lines.Add (Socket.ReceiveText); 
Ende ;

Wenn mehr als ein Client Daten an den Server sendet, benötigen Sie etwas mehr zum Codieren:

Prozedur TForm1.ServerSocket1ClientRead (Absender: TObject; 
Socket: TCustomWinSocket); 
var
 i: Ganzzahl; 
sRec: string ; 
beginfor i:=0 to ServerSocket1.Socket.ActiveConnections-1 dobeginwith ServerSocket1.Socket.Connections [i] dobegin
 sRec:=ReceiveText; 
 if sRecr '' dann beginne
 Memo1.Lines.Add (RemoteAddress + 'sendet:'); 
Memo1.Lines.Add (sRecr); 
 Ende ; 
 Ende ; 
 Ende ; 
Ende ;

Wenn der Server Informationen von einem Client-Socket liest, fügt er diesen Text der Memo-Komponente hinzu. Sowohl der Text als auch die Client-RemoteAddress werden hinzugefügt, sodass Sie wissen, welcher Client die Informationen gesendet hat. In komplexeren Implementierungen können Aliase für bekannte IP-Adressen als Ersatz dienen.

Für ein komplexeres Projekt, das diese Komponenten verwendet, besuchen Sie das Projekt Delphi> Demos> Internet> Chat . Es ist eine einfache Netzwerk-Chat-Anwendung, die ein Formular (Projekt) sowohl für den Server als auch für den Client verwendet.

Similar Posts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.