java编写ftp服务器,编写Java FTP服务器

让我为您编写一个基本示例,使用非常有用的Apache FtpServer:

FtpServerFactory serverFactory = new FtpServerFactory();

ListenerFactory factory = new ListenerFactory();

factory.setPort(1234);// set the port of the listener (choose your desired port, not 1234)

serverFactory.addListener("default", factory.createListener());

PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();

userManagerFactory.setFile(new File("/home/blablah/myusers.properties"));//choose any. We're telling the FTP-server where to read it's user list

userManagerFactory.setPasswordEncryptor(new PasswordEncryptor()

{//We store clear-text passwords in this example

@Override

public String encrypt(String password) {

return password;

}

@Override

public boolean matches(String passwordToCheck, String storedPassword) {

return passwordToCheck.equals(storedPassword);

}

});

//Let's add a user, since our myusers.properties files is empty on our first test run

BaseUser user = new BaseUser();

user.setName("test");

user.setPassword("test");

user.setHomeDirectory("/home/blablah");

List authorities = new ArrayList();

authorities.add(new WritePermission());

user.setAuthorities(authorities);

UserManager um = userManagerFactory.createUserManager();

try

{

um.save(user);//Save the user to the user list on the filesystem

}

catch (FtpException e1)

{

//Deal with exception as you need

}

serverFactory.setUserManager(um);

Map m = new HashMap();

m.put("miaFtplet", new Ftplet()

{

@Override

public void init(FtpletContext ftpletContext) throws FtpException {

//System.out.println("init");

//System.out.println("Thread #" + Thread.currentThread().getId());

}

@Override

public void destroy() {

//System.out.println("destroy");

//System.out.println("Thread #" + Thread.currentThread().getId());

}

@Override

public FtpletResult beforeCommand(FtpSession session, FtpRequest request) throws FtpException, IOException

{

//System.out.println("beforeCommand " + session.getUserArgument() + " : " + session.toString() + " | " + request.getArgument() + " : " + request.getCommand() + " : " + request.getRequestLine());

//System.out.println("Thread #" + Thread.currentThread().getId());

//do something

return FtpletResult.DEFAULT;//...or return accordingly

}

@Override

public FtpletResult afterCommand(FtpSession session, FtpRequest request, FtpReply reply) throws FtpException, IOException

{

//System.out.println("afterCommand " + session.getUserArgument() + " : " + session.toString() + " | " + request.getArgument() + " : " + request.getCommand() + " : " + request.getRequestLine() + " | " + reply.getMessage() + " : " + reply.toString());

//System.out.println("Thread #" + Thread.currentThread().getId());

//do something

return FtpletResult.DEFAULT;//...or return accordingly

}

@Override

public FtpletResult onConnect(FtpSession session) throws FtpException, IOException

{

//System.out.println("onConnect " + session.getUserArgument() + " : " + session.toString());

//System.out.println("Thread #" + Thread.currentThread().getId());

//do something

return FtpletResult.DEFAULT;//...or return accordingly

}

@Override

public FtpletResult onDisconnect(FtpSession session) throws FtpException, IOException

{

//System.out.println("onDisconnect " + session.getUserArgument() + " : " + session.toString());

//System.out.println("Thread #" + Thread.currentThread().getId());

//do something

return FtpletResult.DEFAULT;//...or return accordingly

}

});

serverFactory.setFtplets(m);

//Map mappa = serverFactory.getFtplets();

//System.out.println(mappa.size());

//System.out.println("Thread #" + Thread.currentThread().getId());

//System.out.println(mappa.toString());

FtpServer server = serverFactory.createServer();

try

{

server.start();//Your FTP server starts listening for incoming FTP-connections, using the configuration options previously set

}

catch (FtpException ex)

{

//Deal with exception as you need

}

请注意,在服务器端,您不必手动处理连接,登录等:Ftplet会为您执行此操作.

但是,您可以在匿名内部Ftplet类的重写方法中添加自定义pre [或post]处理(当您使用新的Ftplet(){…}实例化它时.

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值