我在perl中使用Net :: FTP来进行一些文件传输。当我运行以下代码时: -
使用IP地址有任何问题吗?我是否正确在主机领域提供此服务?
use strict;
use Net::FTP;
my $host = "10.77.69.124";
my $user = "administrator";
my $password = "Password";
my $f = Net::FTP->new($host, Debug =>0) or die "Can't open $host\n";
$f->login($user, $password) or die "Can't log $user in\n";
代码无法连接到远程主机。为什么会这样?这不应该与$host
?
答案 0 :(得分:5)
Net :: FTP的构造函数允许您传递单个标量值或要尝试的主机数组。此字段的值应与IO::Socket::INET中的PeerAddr相同(主机名或ip 地址)。
通过指定Debug仔细查看发生的情况。如果您位于防火墙或NAT设置之后,您可能还应将 Passive 设置为非零值,并确保通过打印$ @来检查构造函数是否失败。
my $ftp = Net::FTP->new(Host=>$host, Debug=>1, Passive=>1) || die $@;
如果构造函数成功,您可能想要检查是否有任何其他方法失败:
$ftp->login($user, $pass) || die $ftp->message;
$ftp->cwd($path) || die $ftp->message;
顺便说一句:如果您不确定是否使用了正确的主机参数,可以向Net :: FTP询问它尝试连接的主机:
print $ftp->host, "\n";
如果仍然无效,请提供您的申请的详细输出。
希望这有帮助。
答案 1 :(得分:3)
首先确保您可以到达远程端:
从命令行使用telnet(在linux和windows上也可用,语法不同)
telnet host 21
如果您无法连接命令行,请检查防火墙规则或您的FTP服务器是否在不同的端口上运行?
如果您能够使用普通FTP命令连接尝试登录:
USER user@remote.host
PASS yourpassword
这将使用与远程的ACTIVE ftp连接。这是旧的方式。
现在大多数ftp服务器都使用PASSIVE ftp。测试尝试此命令(来自linux命令行)
ftp -v -p host
在perl中你可以这样使用被动模式:
my $f = Net::FTP->new($host, Debug =>1, Passive => 1) or die "Can't open $host\n";
我希望这会对你有所帮助。