Wie kann ich, welcher Port zu verwenden, in der Perl-IO :: Socket angeben :: INET?
Frage
Ich bin mit IO :: Socket :: INET inter erstellen -Prozess Kommunikation in meinem Programm. Ich brauche eine bestimmte Portnummer in meinem TCP-Client zu verwenden. Ich wurde nach dem Beispiel in Perl doc, aber es funktioniert nicht. Hier ist mein Code:
alter Code (in Betrieb):
tx_socket = new IO::Socket::INET->new('127.0.0.1:8001') || die "Can't connect to 127.0.0.1:8001 : $!\n";
neuer Code (nicht funktioniert):
tx_socket = new IO::Socket::INET->new('127.0.0.1:8001', LocalPort=>9000 ) || die "Can't connect to 127.0.0.1:8001 : $!\n";
Wer weiß, was falsch ist?
Lösung
Grant McLean Antwort funktioniert, wenn Sie das fehlende Komma beheben, aber „Werke“ hier relativ sein kann, was man erwartet.
use IO::Socket::INET;
$sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 8001,
LocalPort => 9000,
Proto => 'tcp'
);
die("No socket!\n") unless $sock;
print "Socket good!\n";
Ausführen dies ergibt:
No socket!
Welche nicht, weil der Code nicht funktioniert, wird es wie erwartet funktioniert (in meinem Fall). Das heißt, es wird erwartet, dass eine Verbindung zu einem lokalen Host-Port 8001 wird mit nichts hört auf der anderen Seite nicht. Dies zeigt die Nützlichkeit von Fehlermeldungen:
use IO::Socket::INET;
$sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 8001,
LocalPort => 9000,
Proto => 'tcp'
) or die("$!\n");
die("No socket!\n") unless $sock;
print "Socket good!\n";
Welche jetzt Ausbeuten ausgeführt werden:
Connection refused
Wenn ich netcat auf Port 8001 laufen, ich ein anderes Ergebnis erhalten:
Socket good!
Andere Tipps
Nach der Dokumentation , sollten Sie so etwas wie tun:
$sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 8001,
LocalPort => 9000,
Proto => 'tcp'
) or die "Connect error: $!";