为什么Net :: FTP无法连接到服务器?

我正在尝试创建一个脚本来列出和使用Ruby从FTP服务器下载数据。 我是Ruby的新手,所以我查找了如何使用Net :: FTP的文档。 我无法理解为什么这不起作用:

require 'net/ftp' server = "ftp.server.com" user = "myuser" password = "mypassword" Net::FTP.open(server, user, password) do |ftp| files = ftp.chdir('mydirectory/') files = ftp.list puts "list out of directory:" puts files end 

这不起作用,返回此错误:

 /home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:298:in`getresp':425>无法建立连接。  (网:: FTPTempError)
    来自/home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:325:in在sendcmd中的块
    来自/home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/monitor.rb:211:in`mon_synchronize'
    来自/home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:323:in`sendcmd'
    来自/home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:402:in`transfercmd'
    来自/home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:478:in"block(2级)in retrlines'
    来自/home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:178:in`with_binary'
    来自/home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:477:in"clock in retrlines'
    来自/home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/monitor.rb:211:in`mon_synchronize'
    来自/home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:476:in“retrlines”
    来自/home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:722:in`list'
    来自test_ftp.rb:10:在`block in'中
    来自/home/adhown/.rvm/rubies/ruby-1.9.3-p194/lib/ruby/1.9.1/net/ftp.rb:116:in“open”
    来自test_ftp.rb:8:in''

任何人都可以解释我的脚本有什么问题吗?

你的代码对我来说很好。 我怀疑问题可能是因为Net::FTP连接模式,默认情况下是活动的。 尝试使用被动模式进行连接,代码示例如下 –

 ftp = Net::FTP.new(server) ftp.passive = true ftp.login user, password files = ftp.chdir('mydirectory/') files = ftp.list puts "list out of directory:" puts files ftp.close 

如果你很好奇,跟随是主动和被动模式之间的区别 (来自维基百科)。

  1. 活动模式下,客户端创建与服务器的TCP控制连接,并向服务器发送客户端的IP地址和任意客户端端口号,然后等待服务器通过TCP启动到该客户端IP地址和客户端端口号的数据连接。 在客户端位于防火墙后面并且无法接受传入TCP连接的情况下,可以使用被动模式。
  2. 被动模式下,客户端使用控制连接向服务器发送PASV命令,然后从服务器接收服务器IP地址和服务器端口号,然后客户端使用该端口号打开从任意客户端端口到服务器的数据连接收到的IP地址和服务器端口号。

以下脚本可以在我的机器上运行,并且基于您的机器,并进行少量清理:

 require 'net/ftp' Net::FTP.open('ftp.linuxjournal.com', 'anonymous', 'anonymous@google.com') do |ftp| ftp.chdir('pub/') files = ftp.list puts "list out of directory:" puts files end 

这是我得到的输出:

 list out of directory: lrwxrwxrwx 1 root ftp 32 Jul 12 2010 00-README-TO-UPLOAD-FILES.txt -> ../00-README-TO-UPLOAD-FILES.txt drwxr-sr-x 3 root ftp 21 Mar 7 2001 elj drwxr-sr-x 3 root ftp 4096 Jan 6 2004 lg drwxr-sr-x 8 root ftp 113 Jun 21 2010 lj drwxr-sr-x 5 root users 112 Oct 2 2007 ssc drwxr-sr-x 2 root ftp 4096 Jan 3 17:21 tux 

我会说代码有效,问题出在其他地方。

由于425 >Failed to establish connection我认为您应该检查您的DNS和/或防火墙。

Interesting Posts