在用org.apache.commons.net.ftp.FTPClient访问服务器是报如下错误:java.net.ConnectException: Connection timed out: connect
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:163)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:184)
at com.asb.test.FtpTest.main(FtpTest.java:34)但我用IE是可以访问FTP服务器目录的,也可以查看文件内容,但我用程序连接时就连接不上,请问是什么原因,急切盼望您的解答!!!
at java.net.PlainSocketImpl.socketConnect(Native Method)
at java.net.PlainSocketImpl.doConnect(Unknown Source)
at java.net.PlainSocketImpl.connectToAddress(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.SocksSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:163)
at org.apache.commons.net.SocketClient.connect(SocketClient.java:184)
at com.asb.test.FtpTest.main(FtpTest.java:34)但我用IE是可以访问FTP服务器目录的,也可以查看文件内容,但我用程序连接时就连接不上,请问是什么原因,急切盼望您的解答!!!
解决方案 »
- java sql2005 JTable 表连接 数据传入 好头痛 啊 想哭啦
- struts2做报表的时候的错误
- 关于RMI项目打成jar后Client无法运行!
- 在Swing中怎样才能把鼠标的活动范围限制在某个窗体内
- 两个变态题目
- helloworld这种没有用到SWING的APPLET也无法在IE中显示吗?
- 当鼠标在程序窗口以外的时候,怎样获得鼠标的坐标值??
- 关于this的一个简单问题。
- 谁给偶JBuilder7的注册机!
- MD5加密函数在netscape中运行的时候抛出NullPointer异常,但是在IE中运行是正常的,请大虾提示!!!(代码内详)
- 【散分】面试常被问到的问题
- 关于JAVA线程问题?
/**
* 向FTP服务器上传文件
*
* @param ip
* FTP服务器ip e.g:192.168.8.22
* @param port
* FTP服务器端口
* @param username
* FTP登录账号
* @param password
* FTP登录密码
* @param serverpath
* FTP服务器保存目录(相对路径) 默认缺省时指向主目录
* @param file
* 上传到FTP服务器上的文件的绝对路径 e.g: E:/log/log.txt OR E:\log\log.txt
*
* @return
* 成功返回true,否则返回false
*/
public boolean uploadFile(String ip, int port, String username,
String password, String serverpath, String file) {
// 初始表示上传失败
boolean success = false;
// 创建FTPClient对象
FTPClient ftp = new FTPClient();
ftp.setControlEncoding("GBK");
try {
int reply=0;
// 连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(ip)的方式直接连接FTP服务器
ftp.connect(ip, port);
// 登录ftp
ftp.login(username, password);
// 看返回的值是不是reply>=200&&reply<300 如果是,表示登陆成功
reply = ftp.getReplyCode();
// 以2开头的返回值就会为真
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
// 转到指定上传目录
serverpath=gbkToIso8859(serverpath);
ftp.changeWorkingDirectory(iso8859ToGbk(serverpath));
checkPathExist(ftp,iso8859ToGbk(serverpath));
//输入流
InputStream input=null;
try {
file=gbkToIso8859(file);
input = new FileInputStream(iso8859ToGbk(file));
} catch (FileNotFoundException e) {
e.printStackTrace();
}
// 将上传文件存储到指定目录
file=iso8859ToGbk(file);
ftp.storeFile(iso8859ToGbk(serverpath)+"/"+iso8859ToGbk(getFilename(file)), input);
// 关闭输入流
input.close();
// 退出ftp
ftp.logout();
// 表示上传成功
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}
/**
* 从FTP服务器下载文件
*
* @param ip
* FTP服务器ip e.g:192.168.8.22
* @param port
* FTP服务器端口
* @param username
* FTP登录账号
* @param password
* FTP登录密码
* @param serverpath
* FTP服务器上的相对路径 默认缺省时指向主目录
* @param fileName
* 要下载的文件名
* @param localPath
* 下载后保存到本地的路径 不含文件名
* @return
* 成功返回true,否则返回false
*/
public boolean downFile(String ip, int port, String username,
String password, String serverpath, String fileName,
String localPath) {
// 初始表示下载失败
boolean success = false;
// 创建FTPClient对象
FTPClient ftp = new FTPClient();
ftp.setControlEncoding("GBK");
try {
int reply;
// 连接FTP服务器
// 如果采用默认端口,可以使用ftp.connect(ip)的方式直接连接FTP服务器
ftp.connect(ip, port);
// 登录ftp
ftp.login(username, password);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
return success;
}
// 转到指定下载目录
serverpath=gbkToIso8859(serverpath);
ftp.changeWorkingDirectory(this.iso8859ToGbk(serverpath));
// 列出该目录下所有文件
FTPFile[] fs = ftp.listFiles();
fileName=this.gbkToIso8859(fileName);
localPath=this.gbkToIso8859(localPath);
// 遍历所有文件,找到指定的文件
for (FTPFile f : fs) {
if (f.getName().equals(iso8859ToGbk(fileName))) {
// 根据绝对路径初始化文件
File localFile = new File(iso8859ToGbk(localPath) + "/" + f.getName());
File localFileDir = new File(iso8859ToGbk(localPath));
//保存路径不存在时创建
if(!localFileDir.exists()){
localFileDir.mkdirs();
}
// 输出流
OutputStream is = new FileOutputStream(localFile);
// 下载文件
ftp.retrieveFile(f.getName(), is);
is.close();
}
}
// 退出ftp
ftp.logout();
// 下载成功
success = true;
} catch (IOException e) {
e.printStackTrace();
} finally {
if (ftp.isConnected()) {
try {
ftp.disconnect();
} catch (IOException ioe) {
}
}
}
return success;
}
/**
*
* 查找指定目录是否存在 不存在创建目录
*
* @param FTPClient
* ftpClient 要检查的FTP服务器
* @param String
* filePath 要查找的目录
* @return
* boolean:存在:true,不存在:false
* @throws IOException
*/
private boolean checkPathExist(FTPClient ftpClient, String filePath)
throws IOException {
boolean existFlag = false;
try {
if (filePath != null && !filePath.equals("")) {
if (filePath.indexOf("/") != -1) {
int index = 0;
while ((index = filePath.indexOf("/")) != -1) {
if (!ftpClient.changeWorkingDirectory(filePath.substring(0,index))) {
ftpClient.makeDirectory(filePath.substring(0,index));
}
ftpClient.changeWorkingDirectory(filePath.substring(0,index));
filePath = filePath.substring(index + 1, filePath.length());
}
if (!filePath.equals("")) {
if (!ftpClient.changeWorkingDirectory(filePath)) {
ftpClient.makeDirectory(filePath);
}
}
}
existFlag = true;
}
} catch (Exception e) {
e.printStackTrace();
}
return existFlag;
}
/**
* 根据绝对路径获得文件名
* @param file
* 文件绝对路径 e.g: e.g: E:/log/log.txt OR E:\\log\\log.txt
* @return
* 转码后的文件名
*/
private String getFilename(String file){
//文件名
String filename="";
if(file!=null&&!file.equals("")){
file=file.replaceAll(Matcher.quoteReplacement("\\"), "/");
String[] strs=file.split("/");
filename=strs[strs.length-1];
}
filename=gbkToIso8859(filename);//转码
return filename;
}
/**
* 转码[ISO-8859-1 -> GBK]
* 不同的平台需要不同的转码
* @param obj
* @return
*/
private String iso8859ToGbk(Object obj) {
try {
if (obj == null)
return "";
else
return new String(obj.toString().getBytes("iso-8859-1"), "GBK");
} catch (Exception e) {
return "";
}
} /**
* 转码[GBK -> ISO-8859-1]
* 不同的平台需要不同的转码
* @param obj
* @return
*/
private String gbkToIso8859(Object obj) {
try {
if (obj == null)
return "";
else
return new String(obj.toString().getBytes("GBK"), "iso-8859-1");
} catch (Exception e) {
return "";
}
}