用java代码连接ftp java连接ftp上传文件

JAVA编写FTP连接报错java.net.ConnectException: Connection refused: connect FTP你用的FTPClient引入不对吧,我们项目上都是用的
import org.apache.commons.net.;
import org.apache.commons.net.;
import org.apache.commons.net.;
下面是我们项目上用到的FTP的实现代码(FTP需要先连接,再登录,之后就是校验登录是否成功),具体代码如下:
/**
* 获取FTPClient对象
*
* @param ftpHost FTP主机服务器
* @param ftpPassword FTP 登录密码
* @param ftpUserName FTP登录用户名
* @param ftpPort FTP端口 默认为21
* @return FTPClient
* @throws Exception
*/
public static FTPClient getFTPClient(String ftpHost, String ftpUserName,
String ftpPassword, int ftpPort) throws Exception {
try {
FTPClient ftpClient = new FTPClient();
ftpClient.connect(ftpHost, ftpPort);// 连接FTP服务器
ftpClient.login(ftpUserName, ftpPassword);// 登陆FTP服务器
if (!FTPReply.isPositiveCompletion(ftpClient.getReplyCode())) {
logger.error("未连接到FTP,用户名或密码错误!");
ftpClient.disconnect();
return null;
} else {
logger.info("FTP连接成功!");
return ftpClient;
}
} catch (SocketException socketException) {
logger.error("FTP的IP地址可能错误,请正确配置!");
throw socketException;
} catch (IOException ioException) {
logger.error("FTP的端口错误,请正确配置!");
throw ioException;
}
}
如何用JAVA实现FTP访问在主函数中,完成服务器端口的侦听和服务线程的创建 。我们利用一个静态字符串变量initDir 来保存服务器线程运行时所在的工作目录 。服务器的初始工作目录是由程序运行时用户输入的,缺省为C盘的根目录 。
具体的代码如下:
public class ftpServer extends Thread{
private Socket socketClient;
private int counter;
private static String initDir;
public static void main(String[] args){
if(args.length != 0) {
initDir = args[0];
}else{ initDir = "c:";}
int i = 1;
try{
System.out.println("ftp server started!");
//监听21号端口
ServerSocket s = new ServerSocket(21);
for(;;){
//接受客户端请求
Socket incoming = s.accept();
//创建服务线程
new ftpServer(incoming,i).start();
i;
}
}catch(Exception e){}
}
java中怎么实现ftp服务器学习了计算机网络之后 , 利用java写了一个ftp服务器 。
一、实现的ftp命令
实现了基本的user,pass,list,port,quit,retr,cwd,stor等命令
二、以上命令所对应的功能
对应的功能是:下载,上传,获取服务器目录,切换目录等
三、用于测试的ftp客户端:windows自带的ftp客户端
四、实现的思想
1、使用ServerSocket进行监听,每个控制连接的请求到来之后,开启一个线程进行处理(这里使用的java bio,效率较差 , 对于控制连接最好使用NIO处理,之后会再写个
nio的实现)
2、 对于命令使用工厂方法模式进行设计,当需要添加新的命令的时候,只需要添加一个新的命令类,实现相应接口,修改工厂产生逻辑 , 而不用修改其他的程序代码 。可
扩展性较好,同时符合开闭原则 。
五、实现过程中碰到的问题
1、对于tcp与socket的关系理解错误,以为所有的数据的输入都是要经过serverSocket().accept()方法 。其实,ServerSocket.accept()所对应的是tcp里面的三次握手建
立连接的阶段,之后的tcp的连接由客户端和服务器端的一对socket来维护,是属于establish阶段 , 在这个阶段,通信是全双工的 , 任何一方都能够发送数据 。
socket.close()对应的阶段是断开连接(四次挥手)的阶段 。
2、刚开始对于ftp协议不是很理解,不知道他的工作方式是怎样的 , 后来在看了tcp协议卷里面的ftp的内容之后,才知道ftp命令和应答码是关键 。eg:刚开始测试时 , 在
输入用户名之后,不会提示输入密码的 。原因:没有返回对应的应答码:331.另外要注意的是:返回的数据要以换行回车作为结束--\r\n.
六、代码列表
【用java代码连接ftp java连接ftp上传文件】简单说明:
ftpServer:是服务器的主程序,入口 , 同时负责监听本地的21号端口 。
ControllerThread.java:用于处理控制连接的线程(每一个控制连接请求对应一个线程)ps:实在很浪费(流量小,连接多) 。
Share:一些全局性数据的维护 。
Command:是命令接口,定义了一个所有命令都要实现的方法 。
CommandFactory:命令工厂 , 通过传人的参数 , 决定生成的命令对象 。
UserCommand,PortCommand等:是具体ftp命令的实现
用java代码连接ftp的介绍就聊到这里吧,感谢你花时间阅读本站内容 , 更多关于java连接ftp上传文件、用java代码连接ftp的信息别忘了在本站进行查找喔 。

    推荐阅读