Ich habe mir doch vor Wochen 'nen Wohnzimmer-PC zusammengeschraubt... und hatte schon immer im Hinterkopf, wie ich das Thema auch in Perl einbauen kann.
Heute kam mir dann die Erleuchtung: Mal eben Perl auf das Teil installiert und versucht, per Perl Musik und Filme auf meinen Laptop zu übertragen.
Und da stellten sich mir gleich mehrere Probleme:
Die Verbindung geht über Netzwerk, und ich mußte die Daten vom Server lesen und auf dem Laptop lokal speichern.
Was also fehlt, ist eine Client-Server Lösung.
Also ich mich schlaugelesen, etwas herumprobiert, und zu folgendem Ansatz gekommen:
Ein Datenspeicher im Netzwerk
Geschrieben hab ich ein kleines Script, das auf Kommando Daten einliest und speichert oder angeforderte Daten ausgibt.
my $socket = new IO::Socket::INET (
LocalPort => 11011, Type => SOCK_STREAM,
Listen => SOMAXCONN, Reuse => 1
);
die "Unable to setup socket: $!\n" unless defined $socket; while (defined(my $conn = $socket->accept)) {
Dieses Script startet einen Server, der auf die Portnummer 11011 "hört".
Als Parameter wird folgendes verwendet: get: Holt Daten aus dem Speicher und gibt sie an den Clienten zurück. Das Format ist get!!!Name_des_Datensatzes
put: Schreibt Daten in den Speicher. Format put!!!Name!!!Daten
Die Daten werden im Rechnerspeicher gehalten, ist ja auch nur zum Üben gedacht...
Der Server läuft übrigens permanend im Hintergrund und wartet undendlich lange auf Anfragen. Man muß ihn also bei Bedarf per Hand wieder stoppen.
# Daten schreiben in Datenspeicher-Server my $socket = new IO::Socket::INET (
PeerAddr => '192.168.0.166', PeerPort => 11011,
Type => SOCK_STREAM,
);
die "Unable to open connection: $!\n"
unless defined $socket;
$socket->send( "put!!!Franz!!!Franz");
######################
# Daten auslesen
###################### my $socket = new IO::Socket::INET (
PeerAddr => '192.168.0.166', PeerPort => 11011,
Type => SOCK_STREAM,
);
die "Unable to open connection: $!\n"
unless defined $socket;
$socket->send( "get!!!Franz!!!1");
Diese Script schreibt in den Server erst den Datensatz Franz mit dem Wert Franz, danach wird der Franz wieder abgerufen und ausgegeben.
Unter PeerAddr steht übrigens die IP des Wohnzimmer-PC's, unter PeerPort wieder die 11011.
Wie gesagt, das ist nur zum Üben...
Aber da fallen mir noch so einige Sachen zu ein... zum Beispiel, und da komm ich wieder auf meinen Cache zurück, könnte man ja einen dicken Netzwerk-Cache einrichten.
Möglich wäre auch ein Proxy-Server für's surfen... oder oder oder...
Übrigens:
Ich weiß, die Cracks unter uns werden jetzt nur müde mit dem Kopf schütteln, aber: Für jemanden, der damit noch nie gearbeitet hat, muß das doch erst mal erarbeitet werden...
In diesem Sinne... bis denne denne!
Kommentare zum Beitrag "Client - Server - Beispiel mit IO::Socket"
Kommentar von timesink
Danke für das Beispiel ;) Ich habe im Netz einige Beispiele zu Socket und IO::Socket gefunden aber keins war a) verständlich für einen Socket-Anfänger und b) funktionierte (also beides kombiniert :P)
Ein dickes Dankeschön für das Beispiel, darauf kann man aufbauen :)
Kommentar von TBu
Hi,
super Beispiel, DANKE!
Kommentar von Alex Schrei
Gute Erklärung für IO::Socket::INET. Werde es selbst auch ein mal ausprobieren.