Indy
TCP (TIdTCPClient)
TCP allgemein
TCP/IP ist heute als "das" Internetprotokoll bekannt. Auch in lokalen Netzen wird TCP/IP immer häufiger eingesetzt. Genau genommen handelt es sich bei TCP/IP um zwei Protokolle: TCP, das Transmission Control Protocol gehört zur Transportschicht, erstellt eine Verbindung zwischen zwei Hosts und sichert die Datenübertragung. Dabei baut es auf das IP (Internet Protocol), die Vermittlungsschicht, auf. Beides sind Entwicklungen des amerikanischen Verteidigungsministeriums (Department of Defense, DoD).
TCP/IP ist die Grundlage für alle Internetanwendungen (z. B. Telnet, FTP, SMTP).
IdTCPClient
Entsprechend wird die TCP-Client-Komponente nur für einen einfachen Verbindungsaufbau zwischen einem Client und einem Server verwendet.
Bei den Indy-Demos befindet sich dazu ein kleines Beispielprojekt (Verzeichnis BasicClientServer), bestehend aus zwei Anwendungen, dem Client und dem Server.
Der Server:
procedure TfrmServer.FormCreate(Sender: TObject);
begin
TCPServer.Active := True;
end;
procedure TfrmServer.TCPServerExecute(AThread: TIdPeerThread);
begin
with AThread.Connection do
begin
WriteLn('Hello from Basic Indy Server server.');
Disconnect;
end;
end;
Bei Programmstart (FormCreate) wird der TCP-Server gestartet. Nimmt eine Client-Anwendung (mit der IdTCPClient-Komponente) Kontakt zu diesem Server auf, wird hier das OnExecute-Ereignis ausgelöst. Der Parameter AThread enthält dabei ein IdPeerThread-Objekt, das für die konkrete Client-Server-Verbindung steht. Über diese Verbindung wird der Hello-Text ausgegeben und die Verbindung anschließend beendet.
Der Client:
procedure TForm2.btnGoClick(Sender: TObject);
begin
with TCPClient do begin
Connect;
try
lstMain.Items.Add(ReadLn);
finally
Disconnect;
end;
end;
end;
Die Client-Anwendung enthält neben der TCP-Client-Komponente einen Button und eine ListBox (lstMain). Wird auf den Button geklickt, so wird obiger Code ausgeführt: Zunächst baut der TCP-Client eine Verbindung zu einem TCP-Server auf (als Host ist hier der lokale Server 127.0.0.1 angegeben). Der TCP-Server stellt fest, dass jemand etwas von ihm will (siehe OnExecute oben), und schickt den Text "Hello from Basic Indy Server server" zurück. Der Client fügt diesen Text der Listbox hinzu und beendet die Verbindung wieder.
Der Austausch von Textbotschaften zwischen zwei Programmen auf TCP-Basis ist also nicht sehr kompliziert. Baut man das weiter aus, erhält man einen Chat. Auch hierzu gibt es ein komplettes Beispielprogramm (Verzeichnis Chat), das jedoch etwas komplexer ist.