Javaに関する様々な情報をご紹介します。

Javaに関する様々な情報をご紹介します。
評価

0

commons-net FTPClient#retrieveFile()エラーについて

commons net(1.4.1) FTPClient#retrieveFile()を連続して呼び出すと途中でSocketExceptionが発生します。この件につきまして、回避方法や対処方法などの情報をお持ちの方、ご教授願います。

javaは1.5.0を使用しています。
--------src---------
    public static void main(String[] args){
        new TestFtp();
    }
    
    public TestFtp(){
        FTPClient client = new FTPClient();
        int port = client.getDefaultPort();
        FileOutputStream fos = null;
        try{
            client.connect(HOST, port);
            client.login(USER,PASS);
            for(int num=0; num < 50; num ++){
                fos = new FileOutputStream(new File("test.txt"));
                client.retrieveFile("test.txt", fos);
            }
        }catch(Exception e){
            e.printStackTrace();
        }finally{
            try{
                fos.close();
                client.disconnect();
            }catch(IOException ioe){
                ;
            }
        }
    }
}
--------end---------
最後まで例外なしに終了する場合もありますが、4,5回目のときもあれば、20回目や40回目など不定期に以下の例外が発生します。

--------例外---------
java.net.SocketException: Connection reset
    at java.net.SocketInputStream.read(Unknown Source)
    at java.io.BufferedInputStream.read1(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    at java.io.BufferedInputStream.fill(Unknown Source)
    at java.io.BufferedInputStream.read(Unknown Source)
    at org.apache.commons.net.telnet.TelnetInputStream.__read(TelnetInputStream.java:114)
    at org.apache.commons.net.telnet.TelnetInputStream.run(TelnetInputStream.java:535)
    at java.lang.Thread.run(Unknown Source)

2

回答

8129

閲覧

2件の回答

評価

0

forの中の2文を、synchronized…うーん、フィールドじゃないしな…。
なんでしょうね…。

評価

0

forの中でファイルを開いて、閉じてない(最後の一つだけ閉じている)ので、
途中でファイルハンドルが足りなくなったり…違うかな。

いずれにせよ、closeの位置はおかしいので直したほうがいいでしょう。

質問から6ヶ月以上経過しているので、回答を書き込むことはできません。