Socket, Daten ausgeben, Ports Listen

hookx

Grünschnabel
Hi,

ich hab leider kein Plan von PHP und mein Büchlein erst in 2 Wochen wieder, aber vielleicht kann mir ja hier jemand helfen:

Ich bräuchte ein paar Zeilen Code, die folgendes tun:

Ein Script, dass alle Daten, die z.B. an 1.2.3.4:5432 ankommen, einfach nur ausgibt? Das Programm soll erst dann abbrechen, wenn ich es beende, z.b. durch Strg+C. Es Soll also quasi ein Port-Listener sein.

danke und Gruß, hook
 
Ich geh einfach mal davon aus, dass das mit "PHP" ein Tippfehler ist und du es eigentlich schon in Perl gelöst haben möchtest.

Zumindest ist Perl die besser geeignete Scriptsprache für dein Problem als PHP. ;)

Perl:
use strict;
use IO::Socket;

my $server = IO::Socket::INET->new(
				LocalAddr	=> "localhost:12345",
				Proto		=> 'tcp',
				Type		=> SOCK_STREAM,
				Listen		=> 10,
				ReuseAddr	=> 1,
				Timeout		=> 10,
			) or die "Can't create Socket: $@\n";

while(my $client = $server->accept()) {
	my $pid = fork();
	if($pid == 0) {
		my ($port, $iaddr) = sockaddr_in($client->sockname);
		print "* New Connection from " . inet_ntoa($iaddr) . ":" . $port . "\n";
		while(my $data = <$client>) {
			print $data;
		}
		print "* closing connection with " . inet_ntoa($iaddr) . ":" . $port . "\n";
	}
}

Allerlei Informationen rund um das Theme gibts Google zu hauf. :)

Also recht simpel und streßfrei. ;)

Gruß,
Sven
 
Wenn ich dieses Script benutze, dann kommt null Ausgabe.
Selbst wenn ich vor "my $server = IO::Socket::INET->new(" z.B. print "blub"; schreibe, wird kein blub ausgegeben.

Hatte jemand dieses Problem auch schonmal und weiß wie mans wegbekommt ?

MfG


Edit: Sobald ich die accept Methode rausnehme, gibt er was aus .. doch leider funktioniert das Script ja dann nicht mehr.
 
Zuletzt bearbeitet:
Kommt die Ausgabe evtl. sobald du das Programm beendest? Dann würde das auf einen recht großen und selten geleerten Ausgabebuffer schliesen.

Dazu müsstest du einfach nur den Ausgabebuffer für STDIN deaktivieren indem du die Variable $| auf einen wahren Wert setzt bevor du das erste mal etwas ausgeben möchtest.

Sollte das auch nicht gehen, solltest du überprüfen ob du nicht evtl. aus versehen die Standardausgabe umleitest. Also der Programmaufruf irgendwie so aussieht: "perl programm.pl > ausgabe.txt".

Gruß,
Sven
 
Zurück