[lug-ld] Antwort: Perl Sockets

Christoph Maya Christoph.Maya at hornbach.com
Mo Jun 27 08:46:59 CEST 2011


Hi Hakon,

über was habt Ihr denn diskutiert? :-) Interessiert mich ja auch, da
Perl :-)

Um deine Frage zu beantworten: du brauchst Threads... immer wenn ein Client
kommt, machst du einen neuen Thread, wenn der Socket zu is, geht dieser
wieder zu. Das mit den Threads hat auch den Charme, dass du auch mehrere
Clients connecten kannst.

Sth. like this:
http://www.nntp.perl.org/group/perl.ithreads/2006/03/msg947.html

#!/usr/bin/perl
use threads; use IO::Socket;

$sock = new IO::Socket::INET (LocalAddr => '127.0.0.1', LocalPort =>
'8888', Proto => 'tcp', Listen => 5,  Reuse => 0) or die ("problem
binding to socket.");

while ($client = $sock->accept()) {
        $client->autoflush(1);
        $sockthread = threads->new(\&serviceClient,$client);
        $sockthread->detach;
}

sub serviceClient {
        my $client = $_[0];
        print $client "hello\n";
        $client->shutdown(2);
        return;
}

Denke das wars oder? Das Beispiel ist halt ohne strict und warnings... und
ungetestet ;) Sieht aber syntaktisch ok aus.

Gruß



                                                                                                                                    
  Von:        Hakon Benner <hakon at halbrot.de>                                                                                       
                                                                                                                                    
  An:         LUG-LD Mailingliste <lug-ld at lists.lug-ld.de>                                                                          
                                                                                                                                    
  Datum:      26.06.2011 01:15                                                                                                      
                                                                                                                                    
  Betreff:    [lug-ld] Perl Sockets                                                                                                 
                                                                                                                                    
  Gesendet    lug-ld-bounces at lists.lug-ld.de                                                                                        
  von:                                                                                                                              
                                                                                                                                    





So hier ... nach dem Tip gestern abend hab ich mal getestet. Das
übersichtlichste und für mich verständlichste Beispiel was ich gefunden hab
ist das folgende:

#!/usr/bin/perl -w
#
##########################
#
# Programm: Empfänger
#
##########################

use IO::Socket;
my $sock = new IO::Socket::INET (
                                 LocalHost => 'server',
                                 LocalPort => '7070',
                                 Proto => 'tcp',
                                 Listen => 1,
                                 Reuse => 1,
                                );
die "Could not create socket: $!\n" unless $sock;

my $variable;
my $new_sock = $sock->accept();

while (<$new_sock>) {
        $variable =  $_;
        print $variable;
}
close($sock);

# Ende #####################

#!/usr/bin/perl -w
#
##########################
#
# Programm: Sender
#
##########################

use IO::Socket;
my $sock = new IO::Socket::INET (
                                 PeerAddr => 'baby.creme',
                                 PeerPort => '7070',
                                 Proto => 'tcp',
                                );
die "Could not create socket: $!\n" unless $sock;

print $sock "Hello there!\n";

close($sock);

# Ende ######################

Das ist ganz toll, funktioniert auch über's Netz, aber nur ein mal, dann
muss ich den Empfänger wieder neu starten.

Hat jemand ne Idee wie das aussehen sollte wenn der Server, einmal
gestartet, wartet, bis ihm jemand was schickt, das ausgibt und dann wieder
wartet bis ihm jemand was neues schickt, dass dann wieder ausgibt .... Erst
wenn ihm der Sender den Text "Ende" sendet beendet der Empfänger.

Der Sender wird dabei einfach immer neu gestartet, also nach dem Senden des
Textes schließt der Sender den TCP Socket und das Programm ist beendet.

--
Hakon Benner-Stollowsky
Linux User Group Landau e.V. (http://www.lug-ld.de)
_______________________________________________
lug-ld mailing list
lug-ld at lists.lug-ld.de
http://lists.lug-ld.de/mailman/listinfo/lug-ld



**************************************************************************************
Hornbach-Baumarkt-AG
Sitz: Bornheim/Pfalz
Registergericht Landau HRB 2311
USt-IDNr. DE 151 116 749

Vorsitzender des Aufsichtsrates: Albrecht Hornbach
Vorstand: Steffen Hornbach (Vorsitzender),
Roland Pelka (stellv. Vorsitzender),
Susanne Jäger, Jürgen Schröcker, Manfred Valder

**************************************************************************************
HORNBACH auf Facebook    http://www.facebook.com/hornbach.de
HORNBACH auf Youtube      http://www.youtube.com/hornbach
HORNBACH auf Twitter        http://twitter.com/Hornbach_tweets

**************************************************************************************
E-mail-Newsletter: Jetzt anmelden!

Ein Mail. Ein Wink:
Einfach auf hornbach.de gehen, anmelden und los geht es.
Lassen Sie sich nichts durch die Lappen gehen!

http://www.hornbach.de/newsletter

**************************************************************************************
This e-mail is only intended for the person(s) to whom it is addressed
and may contain confidential information.
Unless stated to the contrary, any opinions or comments are personal
to the writer and do not represent the official view of the company.
If you have received this e-mail in error, please notify us immediately
by reply e-mail and then delete this message
from your system. Please do not copy it or use it for any purposes,
or disclose its contents to any other person.
Thank you for your co-operation.
**************************************************************************************