PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Perl/Tk + IO::Socket !


torte
17.05.2004, 12:53
Hi @ll ,

1. Also ich möchte ein Server haben der auf einem Port auf Verbindung von nem Client wartet:


$port = 7778;
my $server_socket = new IO::Socket::INET (
LocalPort => $port,
Listen => $SOMAXCONN,
Proto => 'tcp',
Reuse => 1)|| die "$!\n";$port = 7778;

print "Server lauscht an Port $port, zum Beenden Strg+C eingeben oder Prozess killen\n";
while (my $client_socket = $server_socket->accept() ) {
$data = <$client_socket>;
print "$data\n\a";

}

2. Jetzt möchte ich aber gleichzeitig noch ein Main Windows mit Perl/Tk laufen lassen
also so das der Server zwar weiterhin lauscht aber gleichzeitig noch ein Tk main
Window zu sehen ist :
Ein Tk Window:

$main = new MainWindow();
$label = $main -> Label(-text => "Hello");
$label -> pack();
MainLoop;

Im mom läuft das Script bis zum Server und der lauscht dann da !
Oder wenn das Window zu erst im Script steht läufts halt bis zum Window aber das beides Gleichzeitig angezeigt wird krieg ich net hin!!
Hoffe ihr könnt mir helfen,
Torte!


butterkeks
17.05.2004, 15:35
Das machste am besten entweder mit Threads oder Mehreren Prozessen.
Für Threads wird das Thread Modul benutzt:
http://www.perl.com/doc/manual/html/lib/Thread.html

Mehrere Prozesse lassen sich mit fork() und co. realisieren. Bei google und in den manpages müssteste mehr dazu finden.

Nun, was nimmt man von den beiden am besten?
Threads eignen sich, wenn deine Mainform und der server auf dieselben Variablen zugreifen.
Ansonsten nimmste Prozesse. Die beiden Prozesse können zwar immer noch kommunizieren, aber man muss dafür IPC verwenden, was nicht immer einfach ist.

Leider ist das debuggen von multitasking/-threading anwendungen nicht immer ganz unproblematisch, da viele Fehler scheinbar zufällig" auftauchen.

torte
17.05.2004, 22:32
hmm also das mit dem fork() hatte ich schon von jones erfahren !
aber ich glaub in dem fall sind threads besser da die "prozesse" auch noch miteinander kommuniezieren sollen und mit IPC scheint das echt net so leicht zu sein!!