Einzelnen Beitrag anzeigen

Benutzerbild von halinchen
halinchen

Registriert seit: 13. Jun 2006
508 Beiträge
 
Delphi 2007 Professional
 

Einsteigertutorial: Indy 10 nutzen

  Alt 14. Dez 2007, 14:07
Hallo.

In meinem ersten Tutorial möchte ich auf die einfache Nutzung der Indy-Komponeten eingehen.
Ich möchte hier vorallem auf die TCP/IP-Komponenten der Indys eingehen. (TidTCPServer + TidTCPClient).

Installation
Zuerst einmal müssen sie installiert werden.
Die Installation wird hier von Matze beschrieben. Wer keine Personalversion von Delphi hat, der kann Schritt 2 weglassen.

Benutzen der Komponenten
Ich möchte zwei Programme schreiben, so das der Client und der Server getrennt sind.
Als Protokoll nutze ich TCP/IP, da es sehr oft verwendet wird.

Der Server
Ein Server ist ein (Teil-)Programm, welches Daten empfängt.
Man nehme also ein neues Programm und zieht sich eine Komponente TidTCPServer (Palette "Indy Server") auf das Formular.
Nun müssen folgende Werte im Objektinspector geändert werden:

Name = TCPServer
DefaultPort = 50000;
Active = true

DefaultPort gibt an, an welchem Port der Server "lauschen" soll.
Man kann sich also einen Port wie eine Steckdose am Rechner vorstellen. Hinter der Dose ist unser Server. Sobald sich ein Client mit unserem Computer verbindet gibt er einen Port an. Wenn der Port der von unserem Server ist, wird er mit unserem Server kommunizieren. Normalerweise kann ein Port nur von einem Server belegt werden.

Active gibt an, ob der Server aktiviert ist. Bei Active=true beginnt der Server direkt nach dem Start des Programmes sein Arbeit.

Weiterhin benötigen wir noch ein Memo. In folgenden Text ist es Memo1 benannt.
Nun muss man auf unseren Server mit der Maus auswählen und im Objektinspector auf Ereignisse klicken. Wir belegen OnExecute mit folgendem Code:
Memo1.Lines.Add('Nachricht: ' + AContext.Connection.IOHandler.ReadLn); Wir belegen OnConnect mit folgendem Code:
Memo1.Lines.Add('Verbindung: ' + AContext.Binding.PeerIP); Wir belegen OnDisconnect mit folgendem Code:
Memo1.Lines.Add('Verbindungsabbruch: ' + AContext.Binding.PeerIP); Somit wäre unser Server schon fertig.
Bei einer neuen Verbindung oder einem Verbindungsabbruch gibt uns das Programm die IP des Clienten aus.
OnExecute wird ausgelöst, sobald ein Client etwas "schreibt". Alle Lese- und Schreibroutinen finden wir in der Eigenschaft der Connection "IOHandler".
Das AContext-Objekt bekommt mal direkt als Parameter übergeben.
Wenn man den Code nicht kompilieren kann, da ein Objekt "TIdContext" fehlt, muss man nach ganz oben scrollen und hinter die letzte uses-Anweisung (aber vor das ";"!) ein ", idContext" schreiben.

Nun das Projekt compilieren und erstellen.

Der Client
Der Client ist ein (Teil-)Programm, welches Daten sendet. Ein Client verbindet sich immer mit dem Server. Ein Server kann keine Verbindung zu einem Clienten herstellen. (In einem Programm wäre das möglich, sobald das Programm einen Server und einen Clienten bereitstellt.)

Wir legen ein neues Projekt an. (Möglichst das alte speichern, das brauchen wir ja noch ).
Nun ziehen wir einen Button (Palette "Standard") und einen TidTCPClient (Palette "Indy Clients") auf das Formular.
Beim dem TidTCPClienten stellen wir im Objektinspector folgendes ein:

Name : TCPClient
Port: 50000 (muss der selbe sein wie DefaultPort beim Server)
Bei Host gibt es mehrere Möglichkeiten:
a) Das Serverprogramm soll auf dem selben Rechner laufen wie der Client: Host = localhost
b) Das Serverprogramm soll auf einem anderen Rechner laufen wie der Client: Host = <IP oder Name des Serverrechners>

Nun zum Button: Bei dem Ereigniss OnClick schreiben wir folgendes rein:
Delphi-Quellcode:
TCPClient.Connect;
  if TCPClient.Connected then begin
    TCPClient.IOHandler.WriteLn('Dies ist eine Nachricht vom Clienten.');
    TCPClient.Disconnect;
  end;
Nun das Projekt compilieren und erstellen.


Test der beiden Programme
Nun starten wir als ersten das Programm des Servers.
Bei einer eventuelle Meldung der Firewall sollten wir dem Programm erlauben den Port zu belauschen.

Jetzt noch das Programm des Clienten starten und auf den Button klicken.
Im Server sollten 3 Einträge im Memo erscheinen.

Man sieht also, das beim Connecten OnConnect, beim Senden von Nachrichten OnExecute und beim Disconnecten OnDisconnect aufgerufen wird.


Im Anhang sind noch die Beispielprogramme.
Angehängte Dateien
Dateityp: zip indy-tutorial_121.zip (536,2 KB, 1006x aufgerufen)
  Mit Zitat antworten Zitat