当前位置:编程学习 > C#/ASP.NET >>

ftp程序在read的地方卡死了,等服务器断开后才抛异常java.net.socketException

    ftp程序在read的地方卡死了,等服务器断开后才抛异常java.net.socketException,设置了ftp.setReadTimeout(120000);//等待2*60*1000毫秒发生阻塞抛出异常后仍然无效,求大神指教,为什么会这样,怎么解决。以下贴出ftp远程下载服务器端代码
private static void getFilefromServer(FtpClient ftp,OutputStream out, String fileName) throws Exception{
        byte[] buffer = new byte[1024*4];//此处缩小读取字节
        ftp.setReadTimeout(120000);//等待2*60*1000毫秒发生阻塞抛出异常
        InputStream in = null;
        try {
            //InputStream in = ftp.get(fileName);
         in = ftp.get(fileName);
            /*while(in.available()<=0){//不可用,会在没读取到之前直接返回值
             MessageUtil.writeMessage("测试1,循环读取");
             in = ftp.get(fileName);
            }*/
            while (true) {
             //MessageUtil.writeMessage("测试0,数据完整");
                int bytes = in.read(buffer);
                if (bytes < 0)
                    break;
                out.write(buffer, 0, bytes);
            }
            //out.flush();
            //out.close();
            //in.close(); 将关闭输入输出流放在最后
        } catch (Exception ex) {
            throw new Exception(ex);
        } finally{
         out.flush();
            out.close();
            in.close();
        }
    }


以下是错误的log信息
2012-04-06 17:04:06 PPITEM201204061449.xls          成功下载到          D:\NANSHAN_FTP\CLIENT\CLIENT_RECEIVE\商品
2012-04-06 17:21:10 /SERVER/SERVER_SEND/商品          下载第 1 次失败,错误信息:java.net.SocketException: Connection reset

在阻塞模式下,程序卡住了,过了18分钟后,服务端断开程序才抛异常,此处设置了FTP读取的时间的读取时间是2分钟,为什么无效,有什么好的方式让程序读取不了后直接尽快抛出异常?
  
  --------------------编程问答-------------------- 把flush放到循环里。close放到循环外。
补充:.NET技术 ,  C#
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,