| 

.NET C# Java Javascript Exception

2
Hallo Leute,

ich versuche mir gerade einen Socket-Listener in Perl zu bauen. Dafür habe ich eine Server-Anwendung, welche, ebenfalls in Perl programmiert, auf dem Server läuft und einen Socket "überwacht".

#!/usr/bin/perl -w

use strict;
use IO::Socket;

my $sock = new IO::Socket::INET(
LocalHost => 'localhost',
LocalPort => 8080,
Proto => 'tcp',
Listen => SOMAXCONN,
Reuse => 1);

$sock or die "no socket :$!";
my($new_sock, $c_addr, $buf);

while (($new_sock, $c_addr) = $sock->accept()) {
my ($client_port, $c_ip) = sockaddr_in($c_addr);
my $client_ipnum = inet_ntoa($c_ip);
my $client_host =gethostbyaddr($c_ip, AF_INET);
print "got a connection from: $client_host"," [$client_ipnum] ";

while (defined ($buf = <$new_sock>)) {
print $buf;
}
}


Nun habe ich einen Client, der sich auf den Socket verbindet und eine Nachricht absendet, in diesem Fall localtime.

#!/usr/bin/perl -w

use strict;
use IO::Socket;

my $host = shift || 'localhost';
my $port = shift || 8080;
my $sock = new IO::Socket::INET(PeerAddr => $host, PeerPort => $port, Proto => 'tcp');
$sock || die "no socket :$!";
foreach my $i (1..10) {
print $sock "$i",scalar(localtime)," ";
sleep(1);
}
close $sock;


Mein Problem ist nun, dass ich weder die Connection-Zeile "got a connection from xxx" sehe, noch der Client in der Lage ist seine Nachrichten zu übermitteln. Vielleicht übersehe ich gerade ganz blöd eine Kleinigkeit, aber ich komme leider nicht drauf.

Bin für jede gute Antwort dankbar ;-)
News:
23.10.2009
Dustin Klein 2,9k 2 9
23.10.2009: max. Limit an Bewertungen erreicht, werden dann natürlich morgen an Euch vergeben!
Dustin Klein 23.10.2009
3 Antworten
2
Bei mir funktioniert der Code so wie du ihn gepasted hast.
Versuch doch mal

telnet localhost 8080

um zu überprüfen ob der Socket überhauupt offen ist.

Wenn nicht, nimm mal einen anderen Port wie 8080, der wird von manchen Programmen schon belegt (Tomcat z.B.).
23.10.2009
kernkraft 144 2
1
Den port hatte ich mit mongoose getestet, den ich auch auf port 8080 eingestellt habe. Der funktioniert ohne Probleme. Aber ich werd auch dies mal ausprobieren - Danke!
Dustin Klein 23.10.2009
2
Hallo Dustin,

auf die schnelle kann ich Dir raten das ganze mal mit PTKDB zu debuggen. Du mußt dazu einfach die erste Zeile in deinem Server Skript wie folgt abändern:

#!/usr/bin/perl -w -d:ptkdb


Das setzt natürlich voraus das PTKDB bei dir installiert ist. In den meisten Linux Distributionen kann man ihn über den jeweiligen Packetmanager installieren, in den standard Activestate Repositories ist er meines Wissens nach auch vorhanden.

Leider kann ich dir erst mal nur diese Antwort geben, aber vielleicht hilft das ja schon.

Viele Grüße

Kernkraft
23.10.2009
kernkraft 144 2
1
Danke dir, ich hatte das ganze schonmal mit Komodo IDE debugged, aber da ist der Client durchgelaufen und der Server hat leider auch nicht wirklich was gemacht :/

Ich werde es aber nochmal damit versuchen, vielleicht werd ich daraus schlauer... Danke dir!
Dustin Klein 23.10.2009
0
Ich habe deinen Code debugt, und es liegt wohl am Client Code.
Der Server erwartet natürlich ein Zeilenendezeichen (\n):
print $sock "$i",scalar(localtime)," \n";

Eventuell muss auch noch ein $sock->flush getätigt werden.
18.10.2014

Stelle deine Perl-Frage jetzt!