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

filehandle an thread übergeben

Leser: 1


<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten
Froschpopo
 2005-04-08 21:38
#53645 #53645
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
Ich habe folgendes Problem:

ich habe eine Socketverbindung zu einem Server. Solange der Server läuft, muss also mein Client auch auf Nachrichten vom Server warten.
Da das Hauptprogramm ungestört weiterlaufen soll, möchte ich die Socketverbindung in einem Thread abhören.

Leider klappt das nicht so ganz, das Programm wartet solang bis der Server die Verbindung trennt. Was mache ich denn falsch?

In etwa so:
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 IO::Socket;
use threads;
use threads::shared;

my $socket = IO::Socket::INET->new (
PeerAddr => '127.0.0.1',
Type => SOCK_STREAM,
PeerPort => 2005,
Proto=>"tcp"
);

my $t = threads->create( \&start_socket, <$socket> );

sub start_socket {
# hier Socketverbindung bearbeiten....
}

print "Elternprozess arbeitez ungestört weiter\n";
esskar
 2005-04-08 21:46
#53646 #53646
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
wieso übergibst du <$socket> ?
<> leitet doch ein lesen vom socket ein!
esskar
 2005-04-08 21:47
#53647 #53647
User since
2003-08-04
7321 Artikel
ModeratorIn

user image
Tipp: erzeug den Socket in dem thread!
Froschpopo
 2005-04-08 21:50
#53648 #53648
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
das ist leider nicht möglich, weil der Vaterprozess an denselben Socket schreiben können soll.
Es müsste so funktionieren:
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
#!/usr/bin/perl

use IO::Socket;
use threads;
use threads::shared;

my $socket = IO::Socket::INET->new (
    PeerAddr => '127.0.0.1',
    Type => SOCK_STREAM,
    PeerPort => 2005,
    Proto=>"tcp"
);


my $t = threads->create( \&start_socket);

sub start_socket {
    while (<$socket>) {
        print "$_\n"; # Antwort vom Server ausgeben
    }
}

print "Elternprozess arbeitez ungestört weiter\n";
\n\n

<!--EDIT|Froschpopo|1112982691-->
Froschpopo
 2005-04-08 22:06
#53649 #53649
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
neues Problemo:
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
#!/usr/bin/perl

use IO::Socket;
use threads;
use threads::shared;

my $socket = IO::Socket::INET->new (
PeerAddr => '127.0.0.1',
Type => SOCK_STREAM,
PeerPort => 2005,
Proto=>"tcp"
);


my $t = threads->create( \&start_socket);

sub start_socket {
while (<$socket>) {
print "new Request\n";
}
}
sleep(1); # Warten bis Kind geboren ist

print $socket "An das Kind\n"; # Vater schreibt an die Socket

sleep(10);
close($socket);


Theoretisch müsste doch das Kind nach 1 Sekunde "new Request" ausgeben oder? Machts aber nicht !
Wieso?
sri
 2005-04-08 22:57
#53650 #53650
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Du machst so ziemlich alles falsch was man falsch machen kann...das sollte dir doch langsam zu denken geben?

So funktioniert das nicht!

Tip1: Weniger fragen mehr lesen!
Tip2: Globs sind sowieso global!
Tip3: perldoc IO::Select
Tip4: perldoc IO::Poll
Tip5: Vergiss 1-4 und nimm POE!!!
Froschpopo
 2005-04-09 01:01
#53651 #53651
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
du hast meinen letzten Thread falsch verstanden ! Ich versuche nicht mit dem Kind zu kommunizieren sondern dem Kind über die socket ne nachricht zu schreiben.
sri
 2005-04-09 02:05
#53652 #53652
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Moment, vom parent zum child? omg!
Froschpopo
 2005-04-09 02:09
#53653 #53653
User since
2003-08-15
2653 Artikel
BenutzerIn
[default_avatar]
nein eben nicht ! Die beiden sollen über einen entfernten Server kommunizieren ! Der Vater schreibt etwas auf den server was dann das Kind lesen soll ! Die beiden Prozesse sollen nicht untereinander kommunizieren, sondern über einen entfernten Rechner !

Mein Script ist vom Aufbau her schon richtig ! Was der Parent schreibt kommt auf dem Server auch an ! Aber das Kind kriegts irgendwie nicht mit.\n\n

<!--EDIT|Froschpopo|1112998427-->
sri
 2005-04-09 02:45
#53654 #53654
User since
2004-01-29
828 Artikel
BenutzerIn
[Homepage] [default_avatar]
Du kannst doch nicht einen socket mehrfach benutzen...
<< |< 1 2 3 >| >> 21 Einträge, 3 Seiten



View all threads created 2005-04-08 21:38.