Comment puis-je spécifier le port à utiliser dans IO :: Perl :: Socket INET?

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

  •  02-10-2019
  •  | 
  •  

Question

J'utilise IO :: Socket :: INET pour créer entre communication -process dans mon programme. Je dois utiliser un numéro de port spécifique dans mon client TCP. Je suivais l'exemple dans le document Perl, mais il ne fonctionne pas. Voici mon code:

ancien code (travail):

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

nouveau code (ne fonctionne pas):

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

Quelqu'un sait ce qui ne va pas?

Était-ce utile?

La solution

œuvres de réponse de Grant McLean, si vous fixez la virgule manquante, mais « œuvres » ici peut être par rapport à ce que vous attendez.

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

L'exécution de cette donne:

No socket!

Ce qui n'est pas parce que le code ne fonctionne pas, il travaille comme prévu (dans mon cas). Autrement dit, il est prévu qu'une connexion à un port localhost échouera avec 8001 rien d'écoute de l'autre côté. Cela illustre l'utilité des rapports d'erreur:

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

Ce qui donne maintenant en cours d'exécution:

Connection refused

Si je cours netcat écoute sur le port 8001, je reçois un résultat différent:

Socket good!

Autres conseils

Selon la documentation, vous devez faire quelque chose comme:

$sock = IO::Socket::INET->new(
    PeerAddr  => '127.0.0.1',
    PeerPort  => 8001,
    LocalPort => 9000,
    Proto     => 'tcp'
) or die "Connect error: $!";
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top