¿Cómo puedo especificar qué puerto usar en Perl IO :: Socket :: INET?

StackOverflow https://stackoverflow.com/questions/2734251

  •  02-10-2019
  •  | 
  •  

Pregunta

Estoy utilizando IO :: Socket :: INET para crear inter -process comunicación en mi programa. Necesito usar un número de puerto específico en mi cliente TCP. Estaba siguiendo el ejemplo en Perl doc, pero no funciona. Aquí está mi código:

código antiguo (de trabajo):

tx_socket = new IO::Socket::INET->new('127.0.0.1:8001') || die "Can't connect to 127.0.0.1:8001 : $!\n"; 

nuevo código (no funciona):

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"; 

¿Alguien sabe lo que está mal?

¿Fue útil?

Solución

Fábrica de respuesta de Grant McLean, si se fija la coma que falta, pero "obras" aquí pueden ser relativas a lo que se esperaba.

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";

Al ejecutar este rendimiento:

No socket!

Lo que no se debe a que el código no funciona, está funcionando como se esperaba (en mi caso). Es decir, se espera que una conexión a un puerto localhost 8001 fallará sin nada de escucha en el otro lado. Esto ilustra la utilidad de los informes de errores:

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";

¿Qué se ejecuta ahora rendimientos:

Connection refused

Si me quedo escucha netcat en el puerto 8001, me sale un resultado diferente:

Socket good!

Otros consejos

De acuerdo con la documentación , que debería estar haciendo algo como:

$sock = IO::Socket::INET->new(
    PeerAddr  => '127.0.0.1',
    PeerPort  => 8001,
    LocalPort => 9000,
    Proto     => 'tcp'
) or die "Connect error: $!";
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top