IO::Socket dauerhafte verbindung
Manfred K.
- perl
0 Encoder
Hallo ich braeuchte euere hilfe.
Ich versuche gerade socket programmierung in perl zu lernen. Zum anfang erschien mit das modul IO::Socket am einfachsten deswegen versuch ich es erstmal damit.
Habe zwei perl dateien. Einen server und einen client.
Der server sieht so aus
#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket;
my $neuersocket = new IO::Socket::INET (
LocalHost => "localhost",
LocalPort => "7070",
Proto => "tcp",
Listen => 1,
Reuse => 1,
);
my $zeigesocket = $neuersocket->accept();
while (<$zeigesocket>) {
print $_;
}
close($neuersocket);
Der Client sieht so aus:
#!/usr/bin/perl
use strict;
use warnings;
use IO::Socket;
my $schreibesocket = new IO::Socket::INET (
PeerAddr => "localhost",
PeerPort => "7070",
Proto => "tcp",
);
print $schreibesocket "Test";
close($schreibesocket);
Das funktioniert auch prima aber nach der ersten meldung vom client beendet sich der server. Wie kann ich es machen das der server sich erst beendet wenn ich es will?
danke mfg
Du brauchst eine Schleife um den Server, die eine Verbindung entgegennimmt und dann gleich weiter auf neue hört.
Dein while beendet sich dann, wenn auf dem soeben akzeptierten Socket nichts mehr zu lesen da ist.
Hi, danke für deine antwort.
Kannst du mir bitte auf die spruenge helfen? Suche schon die ganze zeit in google aber entweder bringt es mir nichts oder ich versteh es nicht. Habe auch schon die ganze zeit mit den funktionen rumgetestet wie listen oder socketpair aber ich bring es nicht zum laufen.
Danke mfg
Du brauchst eine Schleife um den Server, die eine Verbindung entgegennimmt und dann gleich weiter auf neue hört.
Dein while beendet sich dann, wenn auf dem soeben akzeptierten Socket nichts mehr zu lesen da ist.
Hallo Manfred,
Kannst du mir bitte auf die spruenge helfen? Suche schon die ganze zeit in google aber entweder bringt es mir nichts oder ich versteh es nicht. Habe auch schon die ganze zeit mit den funktionen rumgetestet wie listen oder socketpair aber ich bring es nicht zum laufen.
hier ist ein Beispiel:
use IO::Socket;
use strict;
my $Port = 4712;
my $Server = IO::Socket::INET -> new(LocalPort => $Port, # tell tcp about acting as a server
Type => SOCK_STREAM,
Reuse => 1,
Listen => SOMAXCONN)
|| die "Couldn't be a tcp server on port $Port : $@";
my $Client = ''; # define client's pointer
my $request;
while ($Client = $Server -> accept()) # $Client is the new connection
{
$request = <$Client>; # read client's request
# do something ....
close ($Client); # client should be satisfied
}
Gruß Günter
Hallo Günter, vielen dank jetzt weiss ich wie das gemeint war.
Es klappt im perl interpreter prima leider nicht über cgi.
Ich habe vor einen chat zu basteln. Geht das überhaupt über cgi also als chat? Wenn ich es als cgi benutze tut sich eine zeit lang gar nichts mehr, der ladebalken die der browser mir beim aufruf der seite zeigt steht eine minute bei ungefähr 200 byte und das war es.
Danke mfg