0

我正在使用IO::Socket::INET在我的程序中创建进程间通信。我需要在我的 TCP 客户端中使用特定的端口号。我按照 Perl 文档中的示例进行操作,但它不起作用。这是我的代码:

旧代码(工作):

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

有谁知道出了什么问题?

4

2 回答 2

1

根据文档,您应该执行以下操作:

$sock = IO::Socket::INET->new(
    PeerAddr  => '127.0.0.1',
    PeerPort  => 8001,
    LocalPort => 9000,
    Proto     => 'tcp'
) or die "Connect error: $!";
于 2010-04-29T01:42:48.743 回答
1

如果您修复缺少的逗号,格兰特麦克莱恩的答案有效,但这里的“有效”可能与您的预期有关。

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!
于 2010-04-29T03:49:08.477 回答