Thread IO::Socket Problem ... (16 answers)
Opened by weismat at 2005-07-04 01:56

J-jayz-Z
 2005-07-07 18:33
#37652 #37652
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
lol, das hab ich gar nicht realisiert, aber zumindest beim Server gemacht ^^
Jetzt sieht mein Client so aus:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#!/usr/bin/perl
use strict;
use warnings;
#Pragmas einbinden

#IO::Socket einbinden
use IO::Socket qw(:DEFAULT :crlf);

#CRLF als Zeilenende festlegen
$/ = CRLF;

#Konstante definieren
use constant MY_HOST => '127.0.0.1';
use constant MY_PORT => '2050';

#Variablen deklarieren
my $host = shift || MY_HOST;
my $port = shift || MY_PORT;

#IO::Socket Modul erzeugen
my $socket = IO::Socket::INET->new(
PeerAddr => $host,
PeerPort => $port
) || die "Fehler beim Socket öffnen: $!";

#Schleife, für die Kommunikation
while(defined(my $msg_out = STDIN->getline)) {

#Nachricht verschicken
print $socket $msg_out;

#Nachrichten empfangen
my $msg_in = <$socket>;

#Nachricht ausgeben
print $msg_in;
}

#Socket schließen
$socket->close || warn "Fehler beim schließen des Sockets: $@";

warn "Verbindung beendet..\n";


und mein Server so
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
#!/usr/bin/perl
use strict;
use warnings;
#Pragmas einbinden

#IO::Socket Modul einbinden, mit DEFAULT und CRLF
use IO::Socket qw(:DEFAULT :crlf);

#Konstante definieren
use constant MY_PORT => '2050';

#CRLF als Zeilenende verwenden
$/ = CRLF;

#$quit deklarieren
my $quit = 0;

#STRG+C abfangen
$SIG{'INT'} = sub { $quit++; };

#$port Wert zuweisen
my $port = shift || MY_PORT;

#IO::Socket Objekt erzeugen
my $socket = IO::Socket::INET->new(
Listen => 20,
LocalPort => $port,
Timeout => 60*60,
Reuse => 1) || die
"Konnte Socket Objekt nicht erzeugen: $!";

warn "Warte auf ankommende Verbindung auf Port $port...\n";

#Schleife, wenn $quit nicht wahr ist
while(!$quit) {

#Verbindungen akzeptieren
next unless my $session = $socket->accept;

#Peer host identifizieren
my $peer = gethostbyaddr($session->peeraddr,AF_INET) || $session->peerhost;

#Verbindungsport überprüfen
my $Port = $session->peerport;

#Meldung ausgeben
warn "Verbindung von $peer, $Port\n";

#Schleife, was bei einer Verbindung passiert
while(<$session>) {
my $msg_out = $_ . CRLF;
print $session $msg_out;
}

#Verbindungsende ausgeben
warn "Verbindung von $peer, $Port beendet...\n";

#Session schließen
close($session);
}

#Socket schließen
close $socket;

Somit sollte ja CRLF als Zeilenende gehandhabt werden und das Problem sollte gelöst sein.
Gut, ist das selbe Verhalten... :(
perl -Mstrict -Mwarnings -e 'package blub; sub new { bless {} } sub bar {my $self=shift; $self->{bla}="5065726c2d436f6d6d756e697479"; return $self->{bla};} my $foo=blub->new();print "Hallo ";print pack("H*",$foo->bar()); print "\n"'

http://perl-tutor.de

View full thread IO::Socket Problem ...