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#