Как я могу указать, какой порт использовать в Perl's IO :: Socket :: INET?

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

  •  02-10-2019
  •  | 
  •  

Вопрос

я использую IO :: Socket :: Inet создать межпроцессную связь в моей программе. Мне нужно использовать определенный номер порта в моем клиенте TCP. Я следовал примеру в Perl DOC, но это не работает. Вот мой код:

Старый код (работает):

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

Новый код (не работает):

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

Кто-нибудь знает, что не так?

Это было полезно?

Решение

Ответ Grant Mclean работает, если вы исправите пропущенную запятую, но «работает» здесь может быть относительно того, что вы ожидаете.

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

Запуск этой урожайности:

No socket!

Что это не потому, что код не работает, он работает как ожидалось (в моем случае). То есть ожидается, что подключение к порту 8001 localhost не удастся с ними не слушать на другой стороне. Это иллюстрирует полезность отчетности об ошибке:

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

Который работает сейчас:

Connection refused

Если я запуску Netcat, прослушивающую по порту 8001, я получаю другой результат:

Socket good!

Другие советы

Согласно с Документация, вы должны делать что-то вроде:

$sock = IO::Socket::INET->new(
    PeerAddr  => '127.0.0.1',
    PeerPort  => 8001,
    LocalPort => 9000,
    Proto     => 'tcp'
) or die "Connect error: $!";
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top