如何指定在Perl的IO :: socket :: 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";
有人知道怎么了吗?
解决方案
格兰特·麦克莱恩(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: $!";
不隶属于 StackOverflow