我正在使用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";
有谁知道什么是错的?
答案 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!