Schrift
Wiki:Tipp zum Debugging: use Data::Dumper; local $Data::Dumper::Useqq = 1; print Dumper \@var;
[thread]4434[/thread]

Client verbindet sich aber: holt nicht immer Daten

Leser: 2


<< >> 3 Einträge, 1 Seite
styx-cc
 2006-07-30 13:26
#37347 #37347
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Halli hallo, ich versuche gerade einen kleinen Clienten zu schreiben, was soweit auch funktioniert..
Also er verbindet sich und wenn der Login fehlschlaegt, sagt er auch "moderatorfailed". Wenn des Login allerdings geglueckt ist schweigt er mich an, obwohl er eigentl. "moderatorok" sagen sollte:

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
#!/usr/bin/perl 
use strict;
use warnings;

use IO::Socket::INET;

my $host = 'irc-radio.hopto.org';
my $port = '11122';

my $socket = IO::Socket::INET->new(
PeerAddr => $host,
PeerPort => $port,
proto => 'tcp',
type => 'SOCK_STREAM');


print $socket "moderatorlogin passwort\n\r"; #das muss \r da der server sont janich antwortet

while (defined (my $line = <$socket>)) {
$socket->autoflush(1);
print $line;
}

$socket->close or warn $@;

### SUBS ###


Sieht einer von euch einen kleinen Bug?

MfG

p.s.: ist so ziemlich das erste mal, dass ich mich wirklich mit Netzwerkprogrammeriung unter Perl beschaeftige.
Pörl.
Dubu
 2006-07-31 15:35
#37348 #37348
User since
2003-08-04
2145 Artikel
ModeratorIn + EditorIn

user image
Nur Kleinigkeiten:
- Das autoflush() muss nur einmal auf dem Socket ausgefuehrt werden (und seit IO::Socket Version 1.18 ist es automatisch gesetzt).
- "\n\r" ist falshc. Die Reihenfolge stimmt nicht, es muss CR-LF sein, nicht LF-CR. Und um keine Probleme mit einem IO-Layer zu bekommen, der \n alleine in CR-LF umwandelt, sollte man besser die numerischen Konstanten benutzen ("\015\012") oder gleich die Konstanten/Variablen CRLF resp. $CRLF aus IO::Socket(::INET) importieren:
Code: (dl )
1
2
3
4
use IO::Socket::INET qw/:crlf/;
...
print $socket "moderatorlogin passwort$CRLF";
...

Siehe dazu auch Socket

Eine moegliche Fehlerquelle ist aber, dass du zeilenweise vom Socket einliest. Wenn die Gegenstelle ihre Antwort nicht mit einem Zeilenende abschliesst, kehrt dein <$socket> erst beim Abbruch der Verbindung zurueck, d.h. du siehst die Antwort nie. Evtl. arbeitest du besser mit $socket->recv(...). Siehe dazu perldoc -f recv.
styx-cc
 2006-08-03 11:19
#37349 #37349
User since
2006-05-20
533 Artikel
BenutzerIn

user image
Wow, vielen Dank, werde ich gleich mal ausprobieren..
Hab voll ueberlesen das jemand so freundlich war zu antworten, danke!

MfG
Pörl.
<< >> 3 Einträge, 1 Seite



View all threads created 2006-07-30 13:26.