Server Client Datenübertragung mit Indy-Komponenten

Beispi elprojekte - Datenübertragung mit Indy-Komponenten www.delphi-treff.de 181

7.1.1. Server

Beginnen wir mit der Server-Anwendung. Dazu erstellen wir eine neue VCL-Formularanwendung und platzieren eine TIdTCPServer-Komponente und ein TLabel darauf. Das Label soll die Nachrichten, die der Server empfangen hat, darstellen. Die TIdTCPServer-Komponente muss im Objektinspektor wie folgt konfiguriert werden:  Active: True  Bindings: Neues Binding mit IP-Adresse 127.0.0.1 und Port 40000 hinzufügen: Bei 127.0.0.1 handelt es si h u „lo alhost , also de ‘e h e sel st. Das ist öllig u a hä gig o ei e Netzwerk, weshalb es auch auf deinem PC funktionieren wird, selbst wenn er mit keinem Netzwerk verbunden ist. 40000 als Port ist willkürlich gewählt. Es gibt eine Reihe von Ports, die standardmäßig genutzt werden z.B. Port 80 für HTTP-Verbindungen. Es gibt 65535 Ports. Alle Ports ab 49152 sind frei verwendbar, da sie keiner festen Anwendung zugeordnet sind. Nun brauchen wir noch Code, der ausgeführt wird, wenn ein Client den Server aufruft. Dafür bietet die IdTcpServer-Komponente ein OnExecute-Ereignis. Das soll bei uns so aussehen: procedure TForm1.IdTCPServer1ExecuteAContext: TIdContext; var cmd: String; begin try cmd := TrimAContext.Connection.IOHandler.ReadLn; Label1.Caption := cmd; AContext.Connection.IOHandler.WriteLn Bye ; finally AContext.Connection.Disconnect; end; end; Hie i d de Te t e tgege ge o e , de de Clie t s hi kt, i de Va ia le „ d gespei he t u d i Label1 muss natürlich auf dem Formular platziert werden angezeigt. Anschließend wird als Antwort der Text „B e zu ü kges hi kt u d die Ve i du g ges hlosse . Das a s au h s ho . We i die A e du g sta te , sehe i das Hauptfe ste – mehr nicht. Die Anwendung wartet nun darauf, dass jemand Kontakt zu ihr aufnimmt. Beispi elprojekte - Datenübertragung mit Indy-Komponenten www.delphi-treff.de 182

7.1.2. Client

Nun kommt die Client-Anwendung dran. Wir erstellen also eine neue VCL-Formularanwendung und platzieren diesmal eine TIdTCPClient-Komponente darauf. Außerdem noch ein TEdit zur Eingabe einer Nachricht, die an den Server geschickt werden soll, einen TButton zum Abschicken der Nachricht und ein TLabel zur Anzeige der Antwort, die vom Server kommt. Der TIdTCPClient-Komponente muss noch mitgeteilt werden, wo sie den Server findet. Dazu sind folgende Einstellungen im Objektinspektor notwendig:  Host: 127.0.0.1 eben der Host, der beim Server eingetragen ist  Port: 40000 ebenfalls der Port, der vom Server verwendet wird Und nun fehlt nur noch der Code, der ausgeführt wird, wenn man auf den Button klickt: procedure TForm1.Button1ClickSender: TObject; begin IdTCPClient1.Connect; try IdTCPClient1.IOHandler.WriteLnEdit1.Text; Label1.caption := IdTCPClient1.IOHandler.ReadLn; finally IdTCPClient1.Disconnect; end; end; Was passiert hier? Zuerst lassen wir den Client eine Verbindung zum Server aufbauen Connect. Falls der Server nicht erreichbar ist, z.B. weil wir die Server-Anwendung noch nicht gestartet haben, fliegt hier eine EIdSocketError-Exception. Konnte die Verbindung aufgebaut werden, wird der Text aus dem Eingabefeld Edit1 per WriteLn an den Server geschickt und anschließend direkt die Antwort mittels ReadLn gelesen und in Label1 angezeigt. Zum Schluss wird die Verbindung wieder getrennt.

7.1.3. Der Test