2017-04-20 15 views
2

毎回接続しようとすると、「接続が開かれていません」という例外が表示されます。 FileZillaまたはブラウザでアクセスしようとすると、サーバーは正常に動作しています。"接続が開いていません" FTP Android

私はapache-common-netライブラリを使用しています。

private Boolean downloadAndSaveFile(String server, int portNumber, 
            String user, String password, String filename, File localFile) 
     throws IOException { 
    FTPClient ftp = null; 

    try { 
     ftp = new FTPClient(); 
     ftp.connect(server, portNumber); 

     ftp.login(user, password); 

     ftp.setFileType(FTP.BINARY_FILE_TYPE); 

     ftp.enterLocalPassiveMode(); 

     OutputStream outputStream = null; 
     boolean success = false; 
     try { 
      outputStream = new BufferedOutputStream(new FileOutputStream(
        localFile)); 
      success = ftp.retrieveFile(filename, outputStream); 
     } finally { 
      if (outputStream != null) { 
       outputStream.close(); 
      } 
     } 

     return success; 
    } finally { 
     if (ftp != null) { 
      ftp.logout(); 
      ftp.disconnect(); 
     } 
    } 
} 

実装:

private Boolean buttonDo(String atividade, int groupPosition, int childPosition) { 
    try { 
     downloadAndSaveFile(servidor, porta, user, password, filename, filelocation); 

    }catch (IOException e) { 
     Toast.makeText(_context,e.getMessage(),Toast.LENGTH_SHORT).show(); 

    } 
    return false; 
} 

ログイン:

java.io.IOException: Connection is not open 
at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:514) 
at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:648) 
at org.apache.commons.net.ftp.FTP.sendCommand(FTP.java:622) 
at org.apache.commons.net.ftp.FTP.quit(FTP.java:904) 
at org.apache.commons.net.ftp.FTPClient.logout(FTPClient.java:1148) 
at com.joaobernardos.joaobernardo.gave.ExpandableListAdapter.downloadAndSaveFile(ExpandableListAdapter.java:124) 
at com.joaobernardos.joaobernardo.gave.ExpandableListAdapter.buttonDo(ExpandableListAdapter.java:198) 
at com.joaobernardos.joaobernardo.gave.ExpandableListAdapter.access$200(ExpandableListAdapter.java:34) 
at com.joaobernardos.joaobernardo.gave.ExpandableListAdapter$1.onClick(ExpandableListAdapter.java:241) 
at android.view.View.performClick(View.java:4756) 
at android.view.View$PerformClick.run(View.java:19761) 
at android.os.Handler.handleCallback(Handler.java:739) 
at android.os.Handler.dispatchMessage(Handler.java:95) 
at android.os.Looper.loop(Looper.java:135) 
at android.app.ActivityThread.main(ActivityThread.java:5253) 
at java.lang.reflect.Method.invoke(Native Method) 
at java.lang.reflect.Method.invoke(Method.java:372) 
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:899) 
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:694) 

だから、私はFTP.classを探検に行って、例外を発生させているものを発見:

public int sendCommand(String command, String args) throws IOException { 
    if(this._controlOutput_ == null) { 
     throw new IOException("Connection is not open"); 
    } else { 
     String message = this.__buildMessage(command, args); 
     this.__send(message); 
     this.fireCommandSent(command, message); 
     this.__getReply(); 
     return this._replyCode; 
    } 
} 

私は」ワーカースレッドを使用していません。したほうがいい?どのように実装できますか?

+0

「接続が開かれていません」。それはあなた自身のメッセージです。あなた自身の例外。言及するのは意味がありません。あなたが投げ捨てることがどうなるかを教えてください。 – greenapps

+0

あなたはNetworkOnMainThreadExeptionも持っています。すべてのftpコードをスレッドまたはAsyncTaskに入れる必要があります。 – greenapps

+0

@greenapps OPのメッセージではありません。これはApache Commons Netの例外です。 –

答えて

4

"接続しようとした場合"が例外ではありません。あなたがログアウトすると、あなたはそれを得ています。

私は実際に何が起こるかは、tryブロックのコードが実際に接続せずに例外をスローすることだと思います。あなたは、あなたがログインしたことがないので、スロー何、finallyブロックにログアウトしてみてください。

あなたの実際の問題だときに表示するために、主要な例外を嚥下避けるためにftp.logout()ftp.disconnect()を削除します。

GUIスレッドでネットワークの処理をしているので、それは実際の問題です。主な例外はNetworkOnMainThreadExeptionです。
How do I fix android.os.NetworkOnMainThreadException?

+0

これは私の問題でした。ありがとうございました – JotaB

-1

正しいポート番号を送信してください。サーバーの管理者に確認してください。ポートが22である必要はありませんFTPのために異なるポート番号が設定されている可能性があります

+1

これが問題であることを示す証拠はありません。 –

関連する問題