Come faccio a specificare la porta da utilizzare in Perl IO :: Socket :: INET?
Domanda
IO :: Socket :: INET a creare tra comunicazione -process nel mio programma. Ho bisogno di utilizzare un numero di porta specifico nel mio client TCP. Stavo seguendo l'esempio in Perl doc, ma non funziona. Ecco il mio codice:
vecchio codice (di lavoro):
tx_socket = new IO::Socket::INET->new('127.0.0.1:8001') || die "Can't connect to 127.0.0.1:8001 : $!\n";
nuovo codice (non funzionante):
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";
Qualcuno sa che cosa c'è che non va?
Soluzione
opere risposta di Grant McLean, se si fissa la virgola mancante, ma "opere" qui può essere relativo a ciò che vi aspettate.
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";
Esecuzione questo rendimenti:
No socket!
Il che non è perché il codice non funziona, che sta funzionando come previsto (nel mio caso). Cioè, ci si aspetta che un collegamento a una porta localhost 8001 non riuscirà con l'ascolto nulla sull'altro lato. Questo illustra l'utilità di segnalazione degli errori:
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";
Quali esecuzione ora rendimenti:
Connection refused
Se corro ascolto netcat sulla porta 8001, ottengo un risultato diverso:
Socket good!
Altri suggerimenti
la documentazione , si dovrebbe fare qualcosa di simile:
$sock = IO::Socket::INET->new(
PeerAddr => '127.0.0.1',
PeerPort => 8001,
LocalPort => 9000,
Proto => 'tcp'
) or die "Connect error: $!";