Der Echodienst läuft auf Port 7 des TCP/IP-Systems. Ein dort arbeitender Server wartet auf eventuelle Verbindungswünsche der Clients. Diese nimmt er an (oder auch nicht). Danach besteht seine ganze Funktion darin, die ankommenden Zeichen des Client entgegenzunehmen und postwendend an ihn zurückzusenden. Deswegen auch den Name Echo. Die ganze Sache dient also mehr oder weniger zu Testzwecken, ob das Netzwerk überhaupt Daten sendet und empfängt.
Sie können diesen Dienst ruhig erst einmal ausprobieren, ehe Sie sich zum Einstieg in die Materie der TCP/IP-Programmierung unter Delphi in das Projekt vertiefen. Viele Internetprovider lassen auch den Echodienst laufen. Als Client benutzen Sie das Programm TelNet. Es gehört zu Win95 dazu.
Gehen Sie online. Rufen Sie in TelNet im Menü Verbinden - Netzwerksystem auf. Als Hostname geben Sie einen Domain-Namen oder eine IP-Nummer ein, auf der Sie einen Echoserver vermuten. Wenn Sie gar keinen kennen, probieren Sie es mit www.kamenz.de (aber psssst! - nicht weitersagen!). Als Anschluß wählen Sie echo bzw. tragen nur 7 für Port 7 ein. Der Terminaltyp bleibt auf vt100.
Nach dem Klick auf Verbinden wird's spannend. Sie können jetzt etwas über den Umweg von zig Kilometern Internetleitung in Ihr eigenes TelNet-Fenster schreiben. Falls alle Buchstaben doppelt erscheinen, liegt das nicht am Glas auf Ihrem Schreibtisch. Sie brauchen lediglich den Haken unter Terminal - Einstellungen - lokales Echo wegzunehmen. Schon sehen Sie klarer.
So, nun wissen Sie hoffentlich, was der Echodienst ist. Und einen Server dazu können Sie mit Delphis TCP/IP-Komponenten schnell selbst zusammenbauen. Der läuft dann in Ihrem lokalen Netzwerk oder auch auf Ihrem einzelnen PC als Localhost. Und Sie können sich über diesen kurzen Umweg selbst etwas ins TelNet-Fenster schreiben. Als Einstieg in die Materie reicht das allemal.
Eigentlich braucht der EchoServer kein eigenes Fenster. Einfacher ist es aber, doch eines zusammenzubasteln. Dann sieht man wenigstens etwas. Meine Variante sieht so aus:
Nehmen Sie als erstes die Unit ScktComp in die uses-Klausel auf.
uses Windows, SysUtils, Classes, Forms, Controls, StdCtrls, ComCtrls, ScktComp; |
type TFrmMain = class(TForm) StatusBar: TStatusBar; Label1: TLabel; TxCl1: TLabel; Label2: TLabel; TxCl2: TLabel; procedure FormClose(Sender: TObject; var Action: TCloseAction); procedure FormCreate(Sender: TObject); private SrvSock: TServerSocket; // der Server-Socket procedure Listening(Sender: TObject; Socket: TCustomWinSocket); procedure Connecting(Sender: TObject; Socket: TCustomWinSocket); procedure DisConnecting(Sender: TObject; Socket: TCustomWinSocket); procedure Reading(Sender: TObject; Socket: TCustomWinSocket); procedure IsError(Sender: TObject; Socket: TCustomWinSocket; ErrorEvent: TErrorEvent; var ErrorCode: Integer); public { Public-Deklarationen } end; |
procedure TFrmMain.FormCreate(Sender: TObject); begin SrvSock:=TServerSocket.Create(self); SrvSock.Service:='echo'; {oder SrvSock.Port:=7;} SrvSock.ServerType:=stNonBlocking; SrvSock.OnListen:=Listening; SrvSock.OnClientConnect:=Connecting; SrvSock.OnClientDisConnect:=DisConnecting; SrvSock.OnClientRead:=Reading; SrvSock.Open; end; |
Nun sind noch die Event-Prozeduren für den ServerSocket zu schreiben. Für den Empfang beispielsweise sieht das so aus:
procedure TFrmMain.Reading(Sender: TObject; Socket: TCustomWinSocket); var sTx: String; begin sTx:=Socket.ReceiveText; StatusBar.SimpleText:='empfangen: '+sTx; Socket.SendText(sTx); end; |
Die anderen Prozeduren sind ähnlich. Ach so: Der Server soll nur zwei Clients gleichzeitig bedienen. Meldet sich ein dritter an, wird der abgelehnt. Das erledigt die Connecting-Routine so nebenbei mit. Feinheiten erkennen Sie sicher selbst im Gesamtlisting. Und damit ist Ihr erster TCP/IP-Server fertig. Glückwunsch!!!
Ich hoffe, Sie finden einen Einstieg. Sofern ich dazu komme, beantworte ich auch Ihre Fragen per e-Mail.
Gesamtlisting als Zip-Archiv mit Echo2.DPR, Main.DFM und Main.PAS (2 KByte)
J. Hummel, Mai 1998
[ Startseite ] [ TCP/IP-Seite ]