Open Source im professionellen Einsatz

Eigene Client-Server-Applikationen mit Perl und NetServer::Generic

Japanisch-Paukerin

Eigene Clients und eigene Server sind in Perl schnell programmiert - ohne mit den Details der Netzwerkprotokolle zu kämpfen. (Michael Schilli)

Haben Sie schon einmal den Wunsch verspürt, einen eigenen Server-Dienst zu schreiben? Mit Perl ist das kein Problem, das Modul »NetServer::Generic« hilft Ihnen. Bevor wir loslegen, sehen wir uns aber erst einmal an, was bei etablierten Diensten unter der Haube passiert:

»ftp ftp.microsoft.com
Connected to ftp.microsoft.com.
220 Microsoft FTP Service ...
Name (ftp.microsoft.com:ich):

Das Client-Programm »ftp« öffnet auf der lokalen Maschine einen Netzwerk-Socket, kontaktiert den gewünschten FTP-Server und fängt eine Konversation mit ihm an. Der FTP-Daemon sendet Fragen (etwa: Was ist Ihr Username?), nimmt Antworten oder neue Wünsche des Clients entgegen und reagiert darauf wieder mit neuen Ausgaben.

Eine derartige Client-Server-Applikation benötigt zweierlei:

  • Ein Client-Programm, das die Verbindung zum Server aufbaut, Eingaben vom Benutzer entgegennimmt und diese an den Server weiterleitet. Es gibt die Antworten des Servers für den Benutzer aus.
  • Ein Server-Programm, das ständig auf anfragende Clients wartet. Kommt einer an, startet es eine private Session, liest seine Wünsche und sendet die Antworten zurück. Ein Server bedient unter Umständen mehrere Clients gleichzeitig.

FTP unter der Haube

Um mit einem solchen Service zu kommunizieren, ist nicht immer ein spezialisierter Client nötig. Oft genügt ein generisches Programm wie Telnet. Mit Hostname und Portnummer aufgerufen leitet es die Eingaben an den Server weiter und gibt dessen Antworten aus:

»telnet ftp.microsoft.com 21
Trying 207.46.133.140...
Connected to ftp.microsoft.com.
Escape character is '^]'.
220 ... Microsoft FTP Service

»LIST
530 Please login with USER and PASS.

»QUIT
221 Thank You for using Microsoft Products
Connection closed by foreign host.

Das Kommando »LIST« wollte der FTP-Server nicht ausführen. Er verlangte, dass wir uns vorher mit den Kommandos »USER« und »PASS« authentifizieren. Ein FTP-Client würde jetzt den Benutzernamen abfragen und ihn mit »USER bill« an den Server senden, danach das Passwort mit »PASS ...« nachreichen - schon wäre er als »bill« eingeloggt. Beide Kommandos könnten wir auch mit Telnet absenden, stattdessen verabschieden wir uns: »QUIT«. Der Server bedankt sich freundlich und beendet die Verbindung. So funktioniert das bei vielen Protokollen - und sogar Microsoft muss sich an die Spielregeln halten.

Wir wollen uns aber nicht auf vorhandene Dienste beschränken, sondern das Internet um einen neuen simplen Service bereichern. Wie wäre es mit einem Japanisch-Pauker? Der Pauker wird mit Deutsch-Japanisch-Wortlisten gefüttert und soll die Begriffe in Form eines Quiz abfragen. Aufgeteilt ist die Lernhilfe in einen Server und einen Client, beide in Perl geschrieben.

Japanisch pauken

Das Skript »jap.pl« (Listing 1) simuliert offline, wie später der Server funktionieren wird:

*** Welcome to jap 1.0 ***
»add Vater - chichi
»add Mutter - haha

»quiz
Mutter? (Hit Enter)
haha
Vater? (Hit Enter)
chichi
End of quiz.

»exit
*** Thanks for using jap.

Mit dem »add«-Kommando lernt das Programm neue Kombinationen, den deutschen und den japanischen Ausdruck erwartet es in einer Zeile, durch einen Gedankenstrich voneinander getrennt. Die gelernten Begriffe speichert es persistent in einer Datenbank, so dass es sie auch beim nächsten Aufruf noch kennt.

Das Kommando »quiz« geht in zufälliger Reihenfolge durch alle Einträge in der Datenbank und gibt jeweils den deutschen Begriff aus, gefolgt von einem Fragezeichen. Es wartet dann, bis der Benutzer die Eingabetaste drückt, und gibt schließlich die japanische Lösung aus. Darauf folgt die nächste Quizfrage in Deutsch. Auf das Kommando »exit« hin bricht der Pauker die Verbindung ab. Weitere, oben nicht gezeigte Funktionen sind »help« (zeigt alle verfügbaren Kommandos) und »dump« (gibt alles bisher Gelernte zeilenweise aus).

Listing 1: »jap.pl«

01 #!/usr/bin/perl
02 ##################################################
03 # jap.pl -- Mike Schilli, 2001 (m@perlmeister.com)
04 ##################################################
05 use warnings;
06 use strict;
07 
08 use lib '/etc/scripts';
09 use Jap;
10 
11 Jap::shell();

Diesen Artikel als PDF kaufen

Als digitales Abo

Als PDF im Abo bestellen

comments powered by Disqus

Ausgabe 07/2013

Preis € 6,40

Insecurity Bulletin

Insecurity Bulletin

Im Insecurity Bulletin widmet sich Mark Vogelsberger aktuellen Sicherheitslücken sowie Hintergründen und Security-Grundlagen. mehr...

Linux-Magazin auf Facebook