Java 连接到ftp服务器时出现连接超时异常
我已经看过很多关于这个错误的帖子,但是没有找到适合我的解决方案。 所以我再次发布它 我正在尝试使用apache commons库在ft.drivehq.com上传一个文件。我尝试过许多解决方案,如防火墙设置等。这些解决方案都不起作用 这是从表单字段获取文件名并调用ftp connect方法和upload file方法的代码Java 连接到ftp服务器时出现连接超时异常,java,ftp,Java,Ftp,我已经看过很多关于这个错误的帖子,但是没有找到适合我的解决方案。 所以我再次发布它 我正在尝试使用apache commons库在ft.drivehq.com上传一个文件。我尝试过许多解决方案,如防火墙设置等。这些解决方案都不起作用 这是从表单字段获取文件名并调用ftp connect方法和upload file方法的代码 protected void processRequest(HttpServletRequest request, HttpServletResponse response)
protected void processRequest(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
ismultipart = ServletFileUpload.isMultipartContent(request);
response.setContentType("text/html");
PrintWriter out = response.getWriter();
if(!ismultipart)
{
out.println("<html>");
out.println("<head>");
out.println("<title>servlet upload</title>");
out.println("</head>");
out.println("<body>");
out.println("<p>no file upload</p>");
out.println("</body>");
out.println("</html>");
return;
}
DiskFileItemFactory fileItemFactory = new DiskFileItemFactory();
fileItemFactory.setSizeThreshold(1 * 1024 * 1024);
fileItemFactory.setRepository(new File(TMP_DIR_PATH));
ServletFileUpload uploadHandler = new ServletFileUpload(fileItemFactory);
Connection con = null;
PreparedStatement pstm = null;
PreparedStatement pstm1 = null;
PreparedStatement pstm2 = null;
PreparedStatement pstm3 = null;
try {
/*
* Parse the request
*/
con = Dbconnector.getConnection();
List items = uploadHandler.parseRequest(request);
Iterator itr = items.iterator();
String fileName = "";
FileItem item = (FileItem) itr.next();
System.out.println("item "+item);
String fName = item.getName();
System.out.println("fname " + fName);
fileName = (String) item.getName();
System.out.println("filename " + fileName);
int x = fileName.lastIndexOf('\\');
String fN = fileName.substring(x + 1, fileName.length());
System.out.println(fN);
SimpleFTPClient client = null;
\\table to retrieve drivehq login details
String sq1 = "select * from adserver";
pstm3 = con.prepareStatement(sq1);
ResultSet rs1 = pstm3.executeQuery();
String user = "";
String cld = "";
while (rs1.next()) {
client = new SimpleFTPClient();
cld = rs1.getString("host_name");
user = rs1.getString("username");
client.setHost(rs1.getString("host_name"));
client.setUser(rs1.getString("username"));
client.setPassword(rs1.getString("password"));
client.setRemoteFile("pdp_cloud");
client.setport(21);
boolean log = client.connect();
System.out.println(log);
if (log) {
if(client.uploadFile(item.getInputStream())) {
System.out.println(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>" + user);
String sq2 = "insert into upload (file_name,date,file_data)values(?,?,?)";
pstm1 = con.prepareStatement(sq2);
pstm1.setString(1, fileName);
//pstm1.setString(2, "not set");
// pstm1.setString(3, "not set");
pstm1.setString(2, dateNow);
pstm1.setBinaryStream(3, item.getInputStream(), item.getSize());
pstm1.execute();
} else {
System.out.println(">>>>>>else");
}
} else {
System.out.println("not connected");
}
}
response.sendRedirect("CreateBlocks.html?msg=File Uploaded..");
} catch (Exception ex) {
ex.printStackTrace();
response.sendRedirect("UploadFile.html?msg=Cloud Not Connected");
// log("Error encountered while uploading file", ex);
}
}
有时我在这句话上也会犯错误
OutputStream os = m_client.getOutputStream();
这是错误日志-
java.net.ConnectException: Connection timed out: connect
at java.net.DualStackPlainSocketImpl.connect0(Native Method)
at java.net.DualStackPlainSocketImpl.socketConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.doConnect(Unknown Source)
at java.net.AbstractPlainSocketImpl.connectToAddress(Unknown Source)
at java.net.AbstractPlainSocketImpl.connect(Unknown Source)
at java.net.PlainSocketImpl.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at java.net.Socket.connect(Unknown Source)
at sun.net.ftp.impl.FtpClient.doConnect(Unknown Source)
at sun.net.ftp.impl.FtpClient.tryConnect(Unknown Source)
at sun.net.ftp.impl.FtpClient.connect(Unknown Source)
at sun.net.ftp.impl.FtpClient.connect(Unknown Source)
at sun.net.www.protocol.ftp.FtpURLConnection.connect(Unknown Source)
at sun.net.www.protocol.ftp.FtpURLConnection.getOutputStream(Unknown Source)
at pdp_cloud.SimpleFTPClient.uploadFile(SimpleFTPClient.java:87)
at pdp_cloud.UploadFile.processRequest(UploadFile.java:161)
at pdp_cloud.UploadFile.doPost(UploadFile.java:223)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:650)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:731)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:218)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:506)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:169)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:962)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:445)
at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1115)
at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:637)
at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:316)
at java.util.concurrent.ThreadPoolExecutor.runWorker(Unknown Source)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
at java.lang.Thread.run(Unknown Source)
URL格式正确吗?
谁能帮帮我吗 您使用的是哪种库?您是否尝试过使用org.apache.commons.net.ftp?是Ftp还是Ftps 所以试试这个:
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.ftp.FTPSClient;
public class FTPMain {
FTPClient ftp = null;
public FTPMain(){
}
public Object mainFTP() throws Exception {
try{
initFTPUploader("myhost.com", "user", "pass", 8080);
disconnect();
}catch(Exception e){
String msg = "Error";
}
return "disconnect";
}
public void initFTPUploader(String host, String user, String pwd,int numPort) throws Exception {
ftp= new FTPClient(); //use new FTPSClient if is FTPS
ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
int reply;
ftp.connect(host, numPort);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
throw new Exception("Exception in connecting to FTP Server");
}
ftp.enterLocalPassiveMode();
ftp.login(user, pwd);
ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.printWorkingDirectory();
ftp.changeWorkingDirectory("/myDirectory");
ftp.printWorkingDirectory();
//ftp.execPBSZ(0);// use this two only if is a ftps connection
//ftp.execPROT("P");// use this two only if is a ftps connection
}
}
如果这不起作用,请尝试打开一个shell命令行,如果没有错误,请使用“telnet host.com numPort”,因此,可能错误是您的最后一个代码,而不是有错误,请确保您要连接的输出端口在系统配置中打开。我想现在可以了。它可以工作了吗?你能选择我的答案为“接受”吗?谢谢,它起作用了。。
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.apache.commons.net.PrintCommandListener;
import org.apache.commons.net.ftp.FTP;
import org.apache.commons.net.ftp.FTPClient;
import org.apache.commons.net.ftp.FTPFile;
import org.apache.commons.net.ftp.FTPReply;
import org.apache.commons.net.ftp.FTPSClient;
public class FTPMain {
FTPClient ftp = null;
public FTPMain(){
}
public Object mainFTP() throws Exception {
try{
initFTPUploader("myhost.com", "user", "pass", 8080);
disconnect();
}catch(Exception e){
String msg = "Error";
}
return "disconnect";
}
public void initFTPUploader(String host, String user, String pwd,int numPort) throws Exception {
ftp= new FTPClient(); //use new FTPSClient if is FTPS
ftp.addProtocolCommandListener(new PrintCommandListener(new PrintWriter(System.out)));
int reply;
ftp.connect(host, numPort);
reply = ftp.getReplyCode();
if (!FTPReply.isPositiveCompletion(reply)) {
ftp.disconnect();
throw new Exception("Exception in connecting to FTP Server");
}
ftp.enterLocalPassiveMode();
ftp.login(user, pwd);
ftp.setFileType(FTP.BINARY_FILE_TYPE);
ftp.printWorkingDirectory();
ftp.changeWorkingDirectory("/myDirectory");
ftp.printWorkingDirectory();
//ftp.execPBSZ(0);// use this two only if is a ftps connection
//ftp.execPROT("P");// use this two only if is a ftps connection
}
}