客户端连接FTP服务器,执行到ftpClient.listFiles()总是为空,但是同样的代码却可以连接另外一台FTP服务器。连接方式都是被动模式。经跟踪源码发现执行到socket.connect(...)这个方法时就报connection time out。发现这两台FTP服务器是出于不同的网段,其中客户端与一台服务器在同一个网段,得出在跨网段访问时中间存在防火墙,阻隔了客户端连接访问。
PORT中文称为主动模式,工作的原理: FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,客户端随机开放一个端口(1024以上),发送 PORT命令到FTP服务器,告诉服务器客户端采用主动模式并开放端口;FTP服务器收到PORT主动模式命令和端口号后,通过服务器的20端口和客户端开放的端口连接,发送数据。
PASV是Passive的缩写,中文成为被动模式,工作原理:FTP客户端连接到FTP服务器的21端口,发送用户名和密码登录,登录成功后要list列表或者读取数据时,发送PASV命令到FTP服务器, 服务器在本地随机开放一个端口(1024以上),然后把开放的端口告诉客户端, 客户端再连接到服务器开放的端口进行数据传输。
分享到:
相关推荐
解决了某些系统中,ftpClient.listFiles()返回值总是为空的问题。 使用方法如下: ftpClient.changeWorkingDirectory(path); ftpClient.enterLocalPassiveMode(); ftpClient.configure(new FTPClientConfig(...
ftpClient.changeWorkingDirectory(path); ftpClient.enterLocalPassiveMode(); //由于apache不支持中文语言环境,通过定制类解析中文日期类型 ... FTPFile[] files = ftpClient.listFiles();
6. 获取文件信息:`FTPClient.listFiles(String dir)`返回服务器上指定目录下的文件和目录列表。 7. 保持会话状态:`FTPClient.setFileType(FTP.BINARY_FILE_TYPE)`设置文件传输类型为二进制,适用于大多数文件。...
FTPFile[] files = ftpClient.listFiles(); for (FTPFile file : files) { System.out.println(file.getName()); } ftpClient.makeDirectory("newDirectory"); boolean deleteSuccess = ftpClient.deleteFile(...
public List<String> listFiles(String dirPath) { try { ftpClient.changeWorkingDirectory(dirPath); String[] files = ftpClient.listNames(); return Arrays.asList(files); } catch (IOException e) { e...
5. 文件列表获取:使用`FTPFile[] listFiles(String dir)`获取指定目录下的文件列表。 在实际开发中,为了确保文件操作的可靠性和安全性,需要处理各种异常情况,例如网络中断、认证失败、文件不存在等。此外,完成...
使用`FTPClient.listNames()`或`FTPClient.listFiles()`方法可以获取远程目录中的文件和子目录列表。 6. **删除文件和目录** 删除文件使用`FTPClient.deleteFile()`方法,而删除目录则需先改变到该目录,然后使用...
FTPFile[] files = ftpClient.listFiles(remoteFilePath); long fileSize = 0; if (files.length > 0) { FTPFile file = files[0]; fileSize = file.getSize(); } ``` 接着,我们需要创建一个`FTPClient....
FTPFile[] files = ftpClient.listFiles(); for (FTPFile file : files) { System.out.println(file.getName()); } ``` 完成所有操作后,别忘了关闭连接: ```java ftpClient.logout(); ftpClient.disconnect(); ...
`FTPClient.listFiles()`返回服务器目录下的文件和子目录列表。 7. **删除文件**:使用`FTPClient.deleteFile(String filename)`删除指定的远程文件。 8. **断开连接**:完成所有操作后,确保使用`FTPClient....
在本文中,我们将深入探讨如何利用Apache的FTPClient库在Java环境中实现FTP文件的上传与下载功能,并简要介绍如何设置FTP服务器进行测试。 1. FTP协议基础: FTP基于TCP/IP协议族,提供了双向通信,允许客户端和...
4. **目录操作**:`changeWorkingDirectory(directory)`允许切换当前工作目录,`printWorkingDirectory()`返回当前目录,`listDirectories()`和`listFiles()`则分别用于获取目录和文件列表。 5. **文件和权限管理**...
本文将详细讲解三种常用的FTP客户端库——Apache.FTPClient、ftp4j及jftp,并以Apache.FTPClient为例,深入探讨其使用方法。 #### 一、Apache.FTPClient简介 Apache Commons Net是Apache项目下的一个开源工具包,...
FTPFile[] files = ftpClient.listFiles(); for (FTPFile file : files) { System.out.println(file.getName()); } ftpClient.disconnect(); ``` 2)从FTP服务器上下传一个文件 在`getButton_actionPerformed`方法...
有时,`ftpClient.listFiles()`可能会卡住,但不报错,这可能是由于服务器响应超时或者网络问题。在这种情况下,可以设置超时时间,或者检查网络连接状态: ```java ftpClient.setConnectTimeout(5000); // 设置...
FTPFile[] files = ftpClient.listFiles(remoteDir); for (FTPFile file : files) { if (file.isDirectory()) { File localSubDir = new File(localDir + File.separator + file.getName()); localSubDir.mkdir...
可以使用`FTPClient`的`listNames()`或`listFiles()`方法获取FTP服务器上的文件和目录列表,然后根据需要进行查找。 在提供的压缩包"java FTP服务器文件上传下载,创建多级文件夹.zip"中,包含了一个可以直接运行的...
FTPFile[] files = ftpClient.listFiles("remote/directory"); for (FTPFile file : files) { System.out.println(file.getName()); } ``` ### 错误处理 在进行FTP操作时,应捕获并处理可能的异常,如`...
- **获取目录列表**:利用`FtpClient.listFiles()`或`FtpClient.listNames()`获取当前目录下的文件和目录列表。 5. **断开连接**:完成所有操作后,确保调用`FtpClient.disconnect()`关闭FTP连接。 `commons-...
Apache的ftpclient库为开发者提供了一个强大的工具,它允许我们在Android应用中实现FTP通信。本实例将详细介绍如何使用Apache的ftpclient库在Android环境下构建FTP客户端。 首先,我们需要在项目中添加Apache ...