如何在Perl的IO :: Socket :: INET中指定使用哪个端口?

时间:2010-04-29 01:36:11

标签: perl inet

我正在使用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"; 

有谁知道什么是错的?

2 个答案:

答案 0 :(得分:1)

根据the documentation,你应该做的事情如下:

$sock = IO::Socket::INET->new(
    PeerAddr  => '127.0.0.1',
    PeerPort  => 8001,
    LocalPort => 9000,
    Proto     => 'tcp'
) or die "Connect error: $!";

答案 1 :(得分:1)

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!

这不是因为代码不起作用,它按预期工作(在我的情况下)。也就是说,预计到localhost端口8001的连接将失败而另一端没有任何监听。这说明了错误报告的有用性:

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

如果我在端口8001上运行netcat监听,我会得到不同的结果:

Socket good!