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

Netzwerkproblem



<< >> 3 Einträge, 1 Seite
J-jayz-Z
 2005-08-06 13:22
#57007 #57007
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
Hi, ich hab folgende Probleme mit Netzwerkprogrammierung:
Ich habe einen kleinen Server:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
while(!$quit) {
sub_routine();
next unless my $session = $socket->accept;
my $peer = gethostbyaddr($session->peeraddr,AF_INET) || $session->peerhost;
my $Port = $session->peerport;
while(<$session>) {
print $session $sub_eins . CRLF;
print $session $sub_zwei . CRLF;
}
close($session);
}
close $socket;

somit schickt der Server beide Variablen an den Client, aber nur, wenn der vorher auch wa geschickt hat, kann ich das auch irgendwie schreiben, das er sofort etwas schickt, ohne das der Client was schicken muss?
dann zum Client:
Code: (dl )
1
2
3
4
5
6
while(1) {
print $socket "hallo\n";
my $sub_eins = <$socket>;
my $sub_zwei = <$socket>;
my $output = "Erstens:\t$sub_eins\nZweitens:\t$sub_zwei";
}

Wenn ich über telnet etwas an das Socket schicke, wie hier hallo, bekomme ich beide Antworten vom Server. Und da würde ich gern jede in eine Variable schreiben. einmal die Variable $sub_eins, die der Server schickt und einmal $sub_zwei. Der macht das allerdings nicht. Ich rufe den Client mit ner GUI auf, es gibt keine Fehlermeldung und die GUI startet einfach nicht.
Für Hilfe wäre ich dankbar...
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
esskar
 2005-08-06 14:09
#57008 #57008
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
zum server
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
while(!$quit) {
sub_routine();
next unless my $session = $socket->accept;
my $peer = gethostbyaddr($session->peeraddr,AF_INET) || $session->peerhost;
my $Port = $session->peerport;
print $session "Hallo client" . CRLF;
while(<$session>) {
print $session $sub_eins . CRLF;
print $session $sub_zwei . CRLF;
}
close($session);
}
close $socket;


zum client:
was steht denn in $sub_eins ?`
btw. solltest du dort auch CRLF benutzen
J-jayz-Z
 2005-08-06 17:15
#57009 #57009
User since
2005-04-13
625 Artikel
BenutzerIn
[Homepage] [default_avatar]
In $sub_eins steht eine Zahl. Okay, ich hab es mit CRLF versucht, geht auch nicht...
Ich hab mir mal einen kleinen Test Client gebaut:
Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/usr/bin/perl
use strict;
use warnings;

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

my $host = "192.168.1.1";
my $port = "2050";

my $socket = IO::Socket::INET->new("$host:$port") || die
"Konnte Socket Objekt nicht erzeugen: $!";

while(<$socket>) {
print $socket "hallo" . CRLF;
my $eins = <$socket>;
my $zwei = <$socket>;
print "$eins\n$zwei\n";
}

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

allerdings komme ich damit auch nicht weiter...
Niemand ne Idee?
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
<< >> 3 Einträge, 1 Seite



View all threads created 2005-08-06 13:22.