| Die Kommunikation zwischen AuftragGeber (Client) und AuftragNehmer (Server) ist ein grundlegendes Element der Informatik. | Auf dieser Seite wird demonstriert, wie man mit Perl einfache Client-Server-Experimente ausführen kann. |
Perl
|
Scripts für CGI und Systemverwaltung |
| Client-Server | AuftragGeber (Client) und AuftragNehmer (Server) |
| Single-Client Server | Einfaches Beispiel für gleichzeitig nur 1 Verbindung |
| Multi-Client Server | Einfaches Beispiel für einen Server mit Child-Prozessen |
| Verwandte Themen | Client, Child-Prozesse |
Client-Server |
|
Server-Programmesind die Dienstleister (AuftragNehmer) der modernen Informatik. In der Praxis laufen auf jedem PC zahlreiche (unbemerkte) Server-Programme. Man kann sie sichtbar machen, indem man z.B. das Windows-Programm TaskManager (taskmgr.exe) startet und das Register 'Prozesse' anzeigt.• Server-Programme (services, daemons) laufen im 'Hintergrund' - Sie verwenden kein Fenster und werden nicht durch Maus oder Tastatur gesteuert. Sie werden normalerweise nicht manuell (von einem menschlichen User) gestartet sondern automatisch nach dem System-Start. • Server-Programme erhalten ihre Aufträge über das Netzwerk. Dazu braucht man nicht einmal ein reales Netzwerk, denn jeder PC kann solche Aufträge an 'eigene' Server-Programme erteilen. • In jedem größeren Netzwerk läuft mindestens ein PC als 'Server-PC': Ein derartiger PC ist auf Server-Programme spezialisiert. Dort befindet sich kein PC-Arbeitsplatz, oft sind auch keine User-Programme installiert. Am Server-PC laufen normalerweise mehrere Server-Programme, deren Dienste von allen Arbeits-PC des Netzwerks genutzt werden. • Häufig verwendete Server-Programme sind z.B. Proxy-Server (Router), FileServer (Windows-'Netzlaufwerk'), DruckServer, WebServer, Datenbank-Server, ... ● Der WebServer (HTTP-Server) entwickelt sich zur zentralen Drehscheibe jedes professionell organisierten Netzwerks. • Auf dieser Seite werden experimentelle Server vorgestellt: Man kann damit die Funktionsweise von Client-Server Systemen demonstrieren. Diese Demo-Server führen darüber hinaus keine nützliche Arbeit aus - Man kann eine solche jedoch selbst programmieren. |
Client-ProgrammeSind die AuftragGeber der modernen Informatik. Sie enthalten das gesamte User-Interface:• Damit werden die Wünsche menschlicher AnwenderInnen in Aufträge an Server 'übersetzt'. • Die Aufträge werden über das Netzwerk an den Server-PC und dort an das 'zuständige' Server-Programm gesendet. • Das Client-Programm empfängt anschließend die vom Server erhaltenen Antwort-Daten und übersetzt sie in eine für menschliche AnwenderInnen brauchbare Form. ● Das meist-verwendete Client-Programm ist ein Browser ( = HTTP-Client): • Ein Browser nimmt Aufträge entweder durch Eingabe in die Adress-Zeile oder durch Anklicken eines Links entgegen. • Der Auftrag wird (meist als HTTP-GET-Request) an das Ziel gesendet - normalerweise an einen Webserver. • Die erhaltenen Daten (z.B. lesbarer HTML-Quelltext oder binär codierte Grafik-Dateien) werden zu einer Webseite zusammengesetzt, diese wird vom Browser angezeigt. • Client und Server bilden ein auf eine bestimmte Aufgabe spezialisiertes Paar. Ein Browser benötigt als Partner einen oder mehrere Webserver, ein Mail-Programm braucht als Partner Mail-Server usw. • Für die hier vorgestellten Demo-Server kann man unterschiedliche Clients verwenden, z.B. Browser, Telnet-Programme oder spezialisierte → Client-Programme. |
IP-AdresseJedes in ein Netzwerk integrierte Gerät wird durch eine (innerhalb des Netzwerks) eindeutige IP-Adresse bezeichnet.• Eine typische Adresse im eigenen lokalen Netzwerk ist z.B. 192.168.0.1 • Man muss die IP-Adresse des Server-PC kennen, um mit ihm in Verbindung zu treten. An Stelle der IP-Adresse können evtl. PC-Namen (im eigenen Netzwerk) oder Domain-Namen (im Internet treten). • Ein besonderer Name ist localhost, entsprechend der reservierten IP-Adresse 127.0.0.1 Damit wird immer der 'eigene PC' bezeichnet. Wenn man mit dieser Adresse verbindet, dann richten sich die Aufträge an Server-Programme des eigenen PC, unabhängig von seiner nach außen wirksamen IP-Adresse. ♦ Details zum Thema IP-Adressen |
PortAn jedem Gerät (z.B. PC) laufen gleichzeitig mehrere Server-Programme. Zur Unterscheidung verwendet man den Begriff 'Port' als eine Sub-Adresse der jeweiligen IP-Adresse.• Ein Auftrag von einem Client-Programm an ein Server-Programm benötigt daher sowohl die IP-Adresse als auch den Port des Servers. Die Port-Nummer ist für jeden Server-Typ standardisiert ('well-known port') und daher jedem Client-Programm bekannt. • Beispiel: Jeder Standard Webserver erwartet Aufträge an Port 80, jeder Browser sendet seine Aufträge ohne weitere Maßnahmen an Port 80 der jeweiligen IP-Adresse. • Die Port-Nummer des hier vorgestellten Demo-Servers ist frei wählbar und muss daher jedem Client-Programm ausdrücklich mitgeteilt werden. ♦ Details zum Thema Port |
SocketDie Kombination aus IP-Adresse und Port wird mit 'Socket' bezeichnet.• Jeder Server lauscht an einem eindeutig definierten Socket, d.h. er wartet an der bezeichneten IP-Adresse und an diesem Port auf Client-Aufträge. • Jedes am Server-PC eintreffende Daten-Paket muss die Port-Nummer des Ziels enthalten. Das Betriebssystem leitet die Daten an das damit angegebene Server-Programm weiter. • Auch Client-Programme benötigen eine Port-Nummer, damit die vom Server zurück kommenden Daten an das zuständige Client-Programm geleitet werden. Dazu erhält ein Client-Programm für jeden einzelnen Auftrag eine eigene Port-Nummer, welche vom Betriebssystem des Clients vergeben wird. Diese Client Port-Nummern sind variabel und temporär: Man kann sie als User nicht auswählen. Nach Abschluss eines Auftrags kann das Betriebssystem die gleiche Port-Nummer für einen anderen Auftrag vergeben. |
ProtokollZur Kommunikation in einem Netzwerk kann man unterschiedliche 'Protokolle' verwenden. Dieser Begriff summiert alle Regeln, nach denen der Transport der Daten erfolgen soll.• Die meist-verwendeten Protokolle sind → TCP und → UDP. Oft wird eine Verbindung mit dem Begriff 'TCP/IP' charakterisiert. • Das Protokoll TCP ist besonders sicher, d.h. es kann die häufigsten Übertragungs-Fehler erkennen und (in Grenzen) korrigieren. Der hier vorgestellte Demo-Server verwendet TCP. • Das Protokoll UDP ist einfacher und schneller, jedoch weniger sicher. Um dieses Protokoll zu verwenden, ersetzen sie 'tcp' im Server-Programm durch 'udp'. |
Single-Client Demo-Server |
|
Einfaches, jedoch funktionsfähiges Server-Programm:Vorgaben:Der Server-Port ist beliebig im Bereich 1024...65535 wählbarDer Timeout steuert den Abbruch der Verbindung, wenn der Client keine (weiteren) Daten sendet. Das Zeilen-Ende $eol kann für verschiedene Clients optimiert werden. SocketEin → TCP-Socket wird mit den Methoden des Perl-Moduls IO::Socket hergestellt. Die Verbindungs-Daten des gestarteten Servers werden am Server-Terminal angezeigt.Listen-SchleifeIn einer while-Schleife wartet (lauscht) das Server-Programm auf das Eintreffen eines Client-Auftrags (Request). Dieses Ereignis wird von der accept-Methode geliefert.Danach werden die Verbindungs-Daten sowohl am Server-Terminal (mit print )angezeigt, als auch (mit print $sock) an den Client gesendet. Das Unterprogramm print_both fasst lediglich beide Ausgaben zusammen. Diese Schleife wird ohne zusätzliche Maßnahmen nur durch Abbruch des Programms (z.B. am Server-Terminal) beendet. Kommunikation (Dialog-Schleife)Der Server kann nun über den Kanal <$sock> Daten vom Client erhalten und über den Socket $sock selbst Daten an den Client senden.Als 'Dienstleistung' sendet der Server jede vom Client erhaltene Daten-Zeile $cline wieder (nummeriert) an diesen zurück. Abbruch: Die Dialog-Schleife würde ohne zusätzliche Maßnahmen endlos laufen: Der Server wartet geduldig auf weitere Daten des Client. Daher wurden 3 unabhängige Abbruch-Kriterien eingebaut: Timeout, Leerzeile und ein BefehlsWort (quit). TimeoutWenn ein verbundener Client in der eingestellten Ablaufzeit $timeout_seconds keine weitere Daten sendet, dann wird die Verbindung abgebrochen.Dazu wird der zu überwachende Programm-Teil in einen eval{}-Block eingeschlossen. Am Beginn dieses Blocks wird ein unbenanntes Unterprogramm als Handler für das Signal $SIG{ALRM} definiert. Unmittelbar danach wird mit alarm ein Abbruch programmiert. Nach jedem Eintreffen einer Daten-Zeile vom Client wird der Timeout mit einer weiteren alarm-Anweisung erneuert (verlängert). LeerzeileWenn der Client eine Leerzeile sendet, wird die Verbindung sofort abgebrochen.QuitWenn im Client-Text das Wort quit enthalten ist, dann wird die Verbindung abgebrochen.StopWenn im Client-Text das Wort stop enthalten ist, dann wird nicht nur die Client-Verbindung sndern der gesamte Server beendet.Abbruch des DialogsNach Abschluss des eval{}-Blocks wird ein allfälliges Ergebnis $@ untersucht und angezeigt.Der Abbruch (close $sock) wird am Server-Terminal angezeigt und als letzte Meldung an den Client gesendet. Danach kehrt das Programm in die äußere Schleife (Listen-Loop) zurück: Der Server ist bereit für einen weiteren Client-Auftrag (Request). Abbruch des Server-ProgrammsÜbliche Server-Programme laufen unbegrenzt (bis zur Abschaltung shutdown des Server-PC) und lassen sich durch Clients nicht abgeschalten.In das Beispiel wurde ausnahmsweise ein Abbruch-Kriterium eingebaut: Wenn eine vom Client gesendete Text-Zeile das Wort stop enthält, dann wird die Variable $do_listen abgeschaltet und danach die Listen-Schleife mit last beendet. Hilfs-ProgrammeDas sub iso gibt eine nach Standard → ISO-8601 formatierte Zeit-Marke zurück.Das sub print_both erwartet als Argument einen Text und gibt diesen sowohl an die Server-Konsole als auch an den Kanal zum Client aus. |
Single-Client Server-Programm server_1.pl
#!/usr/bin/perl
use strict;#!C:\Programme\Perl\bin\perl.exe use IO::Socket; use POSIX; print "--- Perl Demo-Server 1 ---\n"; ##### Vorgaben #####
my $srv_port=12345;my $timeout_seconds=3; # my $eol="\n\r"; # Telnet-Client
my $eol="\n"; # Browser-Client##### Start Server #####
my($sock,$csock,$srv_ip);my($peer,$cli_port,$cli_ip,$cli_adr); my($linr,$cline,$txt,$do_listen); $sock=IO::Socket::INET->new(
Proto=>'tcp',
$sock or die "Error: No socket: $!\n";LocalPort => $srv_port, Listen => SOMAXCONN); print '# Demo-Server listening on port '.$srv_port.' since '.iso()."\n"; print '# Timeout = '.$timeout_seconds." s\n"; print '# Process Nr = '.$$."\n"; $do_listen=1; ##### Server-Listen-Loop #####
while(($csock,$peer)=$sock->accept()) {
# Request from a Client:
($cli_port,$cli_adr)=sockaddr_in($peer);$cli_ip=inet_ntoa($cli_adr); $srv_ip=$csock->sockhost; print $csock '# Demo-Server '.$srv_ip.':'.$srv_port.' @ '.iso().$eol; $txt='# Request from Client '.$cli_ip.':'.$cli_port.' @ '.iso(); print_both($txt); print $csock 'Text (lines) received from Client:'.$eol; eval {
local $SIG{ALRM}=sub{die "timeout\n";};
}; # end eval alarm($timeout_seconds); $linr=0; ### Dialog-Loop ###
while($cline=<$csock>) {
$cline=~s/\[x0D\x0A9]//g; # trim
} # end while dialogif($cline) { # Text-Line from Client
$linr++;alarm($timeout_seconds); print_both('('.$linr.') '.$cline); # Check quit/stop:
if($cline=~m/quit/i) {last;}elsif($cline=~m/stop/i) { $do_listen=0; last;
}
else{last;} # empty line alarm(0); if ($@) {
if ($@=~/^timeout/) {
}print_both('# Timeout');
}else {print '## Error: '.$@."\n";} ### Close dialog ### $txt='# Socket closed to Client '.$cli_ip.':'.$cli_port.' @ '.iso(); print_both($txt); close $csock; if(!$do_listen) {last;} close $sock; print 'Exit Demo Server @ '.iso()."\n"; sub iso{ my $iso=strftime('%Y-%m-%d %H:%M:%S',localtime(time()));
return $iso;} sub print_both {
my($txt)=@_;
}
print $txt."\n"; # Server-Terminal print $csock $txt.$eol; # Client |
Start des Servers:Öffnen sie eine → Konsole (→ Linux-Shell oder Windows-→ 'Eingabeaufforderung' cmd.exe) und starten sie das Server-Programm, z.B.# /home/ich/perl_server_1.pl
Auf Windows müssen sie je nach
→ Konfiguration evtl. auch das Perl Interpreter-Programm angeben:
C:\> perl_server_1
Der Server sollte starten und einige Daten anzeigen:
C:\> perl_server_1.pl C:\> c:\programme\perl\bin\perl.exe c:\perl_server_1.pl ...listening since ...
Beachten sie die angezeigte Port-Nummer: Nur auf diesem Port kann man
mit dem Server Verbindung aufnehmen.Firewall:Wenn an einem der beteiligten PC (Client oder Server) ein Firewall läuft, dann müssen sie auf jedem dieser Firewalls die Verbindung mit dem gewählten Port freigeben / erlauben.● Lassen sie das Fenster mit der Server-Konsole offen und beobachten sie die mit jedem Client-Auftrag erfolgende Ausgabe. ● Beenden sie den Server entweder durch Eingabe eines Textes mit zzz am Client oder durch Abbruch mit Strg-C an der Server-Konsole. |
ClientEin Client-Programm kann am gleichen PC laufen oder auf einem beliebigen anderen PC des lokalen Netzwerks. Es muss lediglich die Verbindung funktionieren (und von allfälligen Firewalls erlaubt werden).Browser als ClientJedes Browser-Programm lässt sich als Client verwenden. Geben sie dazu die IP-Adresse, einen : Doppelpunkt als Trennzeichen und den Port des laufenden Servers in die Browser-Adresszeile ein, z.B.http://192.168.0.1:12345
Ändern sie IP-Adresse und Port nach Bedarf.Der Server zeigt jedesmal den vom Browser gesendeten Text (→ HTTP-Request) an. Der Demo-Server erhält diesen Text ebenso wie jeder Web-Server, sendet jedoch als Antwort keine Webseite sondern den gleichen Text (lediglich mit nummerierten Zeilen). Darüber hinaus ist mit einem Browser kein Dialog mit dem Demo-Server möglich. Telnet-ClientJedes Betriebssystem bietet das kaum mehr verwendete Konsolen-Programm telnetDarüber hinaus kann man aus dem Internet kostenfreie Telnet Client Programme laden. • Mit telnet kann man einen interaktiven Dialog mit dem Demo-Server führen: • Starten sie eine Konsole und geben sie die IP-Adresse, ein Leerzeichen als Trennzeichen und den Port des laufenden Servers ein, z.B. # telnet 192.168.0.1 12345
Wenn die Verbindung klappt, wird die Konsole gelöscht und die vom
Server gesendeten Daten angezeigt.• Sie können manuell beliebige Daten-Zeilen eingeben und zeilenweise an den Server senden. • Der Server antwortet mit dem gleichen Text. • Wenn sie eine Leerzeile eingeben oder mit der Eingabe länger warten als die eingestellte Timeout-Zeit, dann wird die Verbindung abgebrochen. • Wenn die Vorgabe-Variable $eol für Browser optimiert ist, dann wird von telnet kein Zeilenrücklauf (CR) angezeigt - Das erfordert etwas Phantasie bei der Ansicht, oder eine Änderung dieser Variablen im Server-Programm. Perl-ClientIn diesem Web werden → Perl Client Programme vorgestellt, die sich besonders f%uuml;r Client-Server Experimente eignen. |
KritikDas Beispiel ist ein Kompromiss: Man könnte es noch weiter vereinfachen, dann würde die Leistung des Servers jedoch unter ein brauchbares Minimum sinken.● Das Beispiel eignet sich gut für eigene Experimente: • Man kann den vom Client eintreffende Text $cline analysieren und beliebig verarbeiten. • Mit print $sock kann man beliebige Texte an den Client ausgeben, z.B. HTML-Webseiten. • Das Server-Programm ist nicht auf die Ausgabe von Text beschränkt: Als Reaktion auf bestimmte Eingabe-Texte (individuelle 'Befehle') kann es auch beliebige andere Arbeiten (z.B. im Dateisystem des Server-PC) ausführen. • Für einen auch nur halbwegs professionellen Betrieb muss der Demo-Server jedoch noch um viele weitere Maßnahmen ergänzt werden. |
Andere Perl-ModuleEin einfacher Demo-Server lässt sich alternativ mit zahlreichen anderen Perl-Modulen herstellen. Dieses Beispiel wurde gewählt, weil das verwendete Modul IO::Socket fast immer verfügbar ist, weil das damit hergestellte Programm auf allen gängigen Systemen funktioniert, und weil sich dieses Programm mit eigenen Ideen leicht verändern lässt.♣ Tipp: Perl bietet Module, die fertige, auf bestimmte Arbeiten spezialisierte Server enthalten. Single-ClientDie wichtigste Einschränkung dieses Demo-Servers:• Während ein Client mit dem Server verbunden ist, kann kein weiterer Client Verbindung aufnehmen. Dieses 'exklusive' Verhalten ist nur in seltenen Fällen erwünscht: Normalerweise soll ein Server-Programm (beliebig) viele Clients gleichzeitig bedienen (↓ nächstes Kapitel). • Eine Ausnahme sind Arbeiten am Server-PC selbst, z.B. Schreiben einer Datei: In diesem Fall soll die Arbeit des Client nicht durch andere Prozesse gestört werden. |
Multi-Client Server mit Child-Prozessen |
|
Einfaches, jedoch funktionsfähiges Server-Demo Programm:Vorgaben:Der Server-Port ist beliebig im Bereich 1024...65535 wählbar.SocketEin → TCP-Socket wird mit den Methoden des Perl-Moduls IO::Socket hergestellt.Process-ID-NrDie Variable $$ enthält die PID-Nr des jeweiligen Prozesses. Die PID des Parent wird in der Variablen $pid gespeichert. Jeder Child-Prozess hat eine andere PID, die zwar angezeigt, jedoch in diesem Programm nicht verwendet wird.Listen-SchleifeIn einer while-Schleife wartet (lauscht) das Parent-Programm auf das Eintreffen eines Client-Auftrags (Request). Dieses Ereignis wird von der accept-Methode geliefert und in der Variablen $csock gespeichert.Prozess-TeilungUnmittelbar nach Erzeugung einer Verbindung $csock wird ein fork-Prozess durchgeführt.Im Parent-Prozess wird lediglich der dort nicht benötigte Socket $csock geschlossen. Unmittelbar danach kann vom Parent mit accept ein neuer Socket zu einem anderen Client geöffnet werden. Im Child-Prozess wird die gesamte weitere Kommunikation mit dem soeben verbundenen Client durchgeführt. Mehrere gleichzeitig laufende Child-Prozesse verwenden dazu je eine individuelle Kopie der Variablen $csock DialogDer Child-Prozess erhält in einer while-Schleife je eine Zeile der Client-Anweisungen in der Variablen $clineDiese Variable wird analysiert und auf 5 verschiedene Befehls-Worte analysiert: help, date, time quit, stop • Die Client-Befehle Help, Date, Time liefern je eine Text-Zeile als Beispiel für die nutzbare Server-'Leistung'. • Der Client-Befehl Quit führt mit Anweisung last zum Verlassen der Dialog-Schleife: Der Child-Prozess wird mit exit beendet und die Verbindung zum Client abgebrochen. Der Client-Befehl Stop beendet das Parent-(Server)-Programm und danach sich selbst. |
#!/usr/bin/perl
#!C:\Programme\Perl\bin\perl.exe use strict; use IO::Socket; use POSIX; print "--- Perl Forking Server Demo ---\n"; ##### Vorgaben #####
my $srv_port = 12345;##### Socket #####
my $sock = new IO::Socket::INET(
LocalPort => $srv_port,
$sock or die "Error: No socket: $!\n";Proto => 'tcp', Listen => SOMAXCONN); STDOUT->autoflush(1); my($csock,$cline,$ppid,$cpid); $ppid=$$; # parent PID ##### Listen-Schleife #####
while ($csock = $sock->accept()) {
$cpid = fork();
} # end while acceptif (!defined($cpid)) {die "Fork error ";} if ($cpid) {
print "Parent: ppid=$pid=$$, cpid=$cpid\n";
close $csock; else{ # Child process if cpid=0
print "Child: ppid=$ppid, cpid=$$\n"; close $sock; print $csock "Here is the forking server.\n"; while (defined($cline = <$csock>)) {
$cline=~s/[\x0D\x0A]//g; # trim
} # end whileprint "child cline=<$cline>\n"; if($cline=~m/help/i || $cline=~m/\?/) {
print $csock "help, date, time, quit, stop\n";
}elsif($cline=~m/date/i) {
print $csock strftime('%Y-%m-%d',localtime(time()))."\n";
}elsif($cline=~m/time/i) {
print $csock strftime('%H:%M:%S',localtime(time()))."\n";
}elsif($cline=~m/quit/i) {
print $csock "Quit detected";
}print "Client Quit detected\n"; last; elsif($cline=~m/stop/i) {
print $csock "STOP detected";
}print "Server STOP detected\n"; kill 9,$ppid; last; else{print $csock "Unknown: <$cline>\n";} print "Child exit\n"; exit 0; print "Never executed\n"; |
Start des Servers:Öffnen sie eine → Konsole (→ Linux-Shell oder Windows-→ 'Eingabeaufforderung' cmd.exe) und starten sie das Server-Programm, z.B.# /home/ich/perl_server_2.pl
Auf Windows müssen sie je nach
→ Konfiguration evtl. auch das Perl Interpreter-Programm angeben:
C:\> perl_server_2
C:\> c:\programme\perl\bin\perl.exe c:\perl_server_2.pl |
ClientAls Client-Programm eignet sich u.a. ein Browser, ein Telnet-Client oder ein spezielles Client-Programm - am gleichen PC oder an jedem anderen PC des lokalen Netzwerks. Ersetzen sie IP-Adresse und Port der folgenden Beispiele durch die jeweils realen Daten ihres Servers.Browser:
http://192.168.0.1:12345
Der Server zeigt den gesamten vom Browser gesendeten HTTP-Request Text an
und sendet ihn als 'unbekannte Befehle' an den Browser zurück.Telnet:
C:\> telnet 192.168.0.1 12345
Ein Telnet-Client erlaubt einen interaktiven Dialog mit dem Server. Man kann
beliebige Texte eingeben, z.B. die 5 vom Server erkannten Befehls-Worte.help time quit Mit quit wird der Dialog beendet. |
Kritik• Das Beispiel eignet sich gut für eigene Experimente: Der vom Client eintreffende Text $cline kann analysiert und beliebig verarbeitet werden. Mit print $sock lassen sich beliebige Texte an den Client ausgeben.Das Server-Programm ist nicht auf die Ausgabe von Text beschränkt: Als Reaktion auf bestimmte Eingabe-Texte (individuelle 'Befehle') kann es auch beliebige andere Arbeiten (z.B. im Dateisystem des Server-PC) ausführen. • Für einen auch nur halbwegs professionellen Betrieb müsste der Demo-Server um viele weitere Maßnahmen ergänzt werden, z.B. die sichere Abschaltung aller Child-Prozesse nach dem Stop des Servers. |
Server-StopIm Gegensatz zu professionellen Server-Programmen bleibt dieser Demo-Server an jene Konsole (Terminal) gebunden, an welcher er gestartet wurde.Man kann diesen Server an der Konsole mit Strg-C beenden. Reale Server werden nach dem Start vom Terminal getrennt, laufen unabhängig weiter und lassen sich an der Konsole (auf diese Weise) nicht mehr stoppen. Ausnahmsweise kann man den Server auch von jedem Client mit dem Befehl Stop beenden - Das dient nur zur Demonstration und ist natürlich auf realen Server-Programmen ausgeschlossen. AusgabeAn der Server- Konsole werden zur Vereinfachung alle wesentlichen Daten mit print-Anweisungen angezeigt. Reale Server senden keine Texte an irgendeine Konsole, sie schreiben wichtige Ereignisse in eine Log-Datei. |
|