2015-10-01 5 views
-3

Я пытаюсь создать FTP-сервер с java для тестирования другого приложения, но когда я пытаюсь запустить сервер, это сбой. Это код:Сбой FTP-сервера

Импорт:

import java.io.File; 
import java.io.IOException; 
import java.util.ArrayList; 
import java.util.HashMap; 
import java.util.List; 
import java.util.Map; 

import org.apache.ftpserver.FtpServer; 
import org.apache.ftpserver.FtpServerFactory; 
import org.apache.ftpserver.ftplet.Authority; 
import org.apache.ftpserver.ftplet.FtpException; 
import org.apache.ftpserver.ftplet.FtpReply; 
import org.apache.ftpserver.ftplet.FtpRequest; 
import org.apache.ftpserver.ftplet.FtpSession; 
import org.apache.ftpserver.ftplet.Ftplet; 
import org.apache.ftpserver.ftplet.FtpletContext; 
import org.apache.ftpserver.ftplet.FtpletResult; 
import org.apache.ftpserver.ftplet.UserManager; 
import org.apache.ftpserver.listener.ListenerFactory; 
import org.apache.ftpserver.usermanager.PasswordEncryptor; 
import org.apache.ftpserver.usermanager.PropertiesUserManagerFactory; 
import org.apache.ftpserver.usermanager.impl.BaseUser; 
import org.apache.ftpserver.usermanager.impl.WritePermission; 

Код:

public class FTPServerTest { 


public static void main(String[] args) { 
    // TODO Auto-generated method stub 
    FtpServerFactory serverFactory = new FtpServerFactory(); 
    ListenerFactory factory = new ListenerFactory(); 
    factory.setPort(36000); 
    serverFactory.addListener("default", factory.createListener()); 
    PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory(); 
    userManagerFactory.setFile(new File("Z:\\Winteco98\\FTPUssers\\myusers.properties")); 
    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("ProdeWin"); 
     user.setPassword("ProdeWinW98"); 
     user.setHomeDirectory("Z:\\Winteco98\\FTPUssers"); 
     List<Authority> authorities = new ArrayList<Authority>(); 
     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<String, Ftplet> m = new HashMap<String, Ftplet>(); 
     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<String, Ftplet> 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 
     } 

} 

И, наконец, ошибка:

Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/mina/filter/executor/OrderedThreadPoolExecutor 
    at org.apache.ftpserver.FtpServerFactory.<init>(FtpServerFactory.java:51) 
    at mainPackage.FTPServerTest.main(FTPServerTest.java:32) 
Caused by: java.lang.ClassNotFoundException: org.apache.mina.filter.executor.OrderedThreadPoolExecutor 
    at java.net.URLClassLoader.findClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source) 
    at java.lang.ClassLoader.loadClass(Unknown Source) 
    ... 2 more 

Я не идея, где делает ошибку, пожалуйста помогите.

+0

Вы пропускаете файл банку для org.apache.mina в вашем пути к классам Шерлока !!! Google, как решить jar-файл в проблеме с classpath ... Удачи. Кроме того, создание FTP-сервера с нуля - хорошая идея. –

+0

Мне нужен тест ftp-клиента, как я делаю, если у меня нет ftp-сервера ?? –

ответ

0

Вам необходимо добавить файл mina jar в свой путь к библиотеке проекта. Найдите ниже ссылку для загрузки файла jar.

Mina Jar file

+0

Я добавляю мини-банку, и когда я запускаю программу, это результат: «Исключение в потоке» main «java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory \t at org.apache.ftpserver.impl.DefaultFtpServerContext. ' –

+0

(DefaultFtpServerContext.java:63) \t at org.apache.ftpserver.FtpServerFactory. (FtpServerFactory.java:51) \t в mainPackage.FTPServerTest.main (FTPServerTest.java:34) Вызванный: java.lang.ClassNotFoundException: org.slf4j.LoggerFactory \t в java.net.URLClassLoader.findClass (Неизвестно Источник) \t на java.lang.ClassLoader.loadClass (Unknown Source) \t в sun.misc.Launcher $ AppClassLoader.loadClass (Unknown Source) \t в java.lang.ClassLoader.loadClass (Unknown Source) \t .. 3 –

+0

, когда вы получаете такой тип исключения 'java.lang.NoClassDefFoundError: org/slf4j/LoggerFactory', поэтому вам нужно добавить нужную библиотеку в ваш путь к проекту, здесь вам нужно добавить l oggerFactory jar file найти здесь. [Www.java2s.com/Code/JarDownload/slf4j/slf4j.jar.zip] –