我在用 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!

这并不是因为代码不起作用,它是按预期工作的(就我而言)。也就是说,预计与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!

其他提示

根据 文档, ,您应该做类似的事情:

$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