ftpClient.listFiles()
ftpClient.retrieveFile()
出现假死状态,日志也没办法跟踪。在上面两个方法之前添加ftpClient.enterLocalPassiveMode()。
ftp连接有两种方式
主动模式Standard:
客户端开放端口给服务端用。客户端和服务端的21端口建立连接,通过这个通道发送命令。客户端需要接收数据的时候在这个通道上发送port命令,port命令指定客户端用什么端口接收数据。在传送数据的时候,服务端通过自己的tcp 20端口发送数据
服务端必须和客户端建立新连接传送数据
被动模式Passive:
服务端开放端口给客户端用。建立连接时,服务端打开1024-5000之间的随机端口并且通知客户端在这个端口传送数据的请求。服务端通过这个端口进行数据传送,
服务端不需要和客户端建立新连接传送数据
很多防火墙在设置的时候都不允许接收外部发起的链接的,所以ftp的standard模式在内部网络及其通过防火墙出去的时候受到限制。因为服务端20端口无法和客户端建立新的连接。