如何使用Scala / Java启动Apache MINA FTP服务器?

时间:2011-06-09 19:50:46

标签: java apache scala ftp apache-mina

我正在尝试在我的Scala应用程序中嵌入一个Apache MINA FTP服务器,并且无法将其删除。我正在使用Apache FtpServer 1.05,并且在我们的网站上找到了a couple of examples,这些内容在我进行Scala-ize时似乎无法正常工作。

这是我的代码:

package aperture

import org.apache.ftpserver.listener.ListenerFactory
import org.apache.ftpserver.ftplet._
import org.apache.ftpserver.{FtpServerFactory, FtpServer}
import java.io.File
import org.apache.ftpserver.usermanager.{UserFactory, SaltedPasswordEncryptor, PropertiesUserManagerFactory}

object Main {
    def main(args: Array[String]) {
        val serverFactory: FtpServerFactory = new FtpServerFactory()
        val listenerFactory: ListenerFactory = new ListenerFactory()

        listenerFactory.setPort(2221);
        listenerFactory.setServerAddress("localhost")
        listenerFactory.setImplicitSsl(false);

        serverFactory.addListener("default", listenerFactory.createListener())

        val userManagerFactory: PropertiesUserManagerFactory = new PropertiesUserManagerFactory()
        userManagerFactory.setFile(new File("myusers.properties"))
        userManagerFactory.setPasswordEncryptor(new SaltedPasswordEncryptor())
        val userManager: UserManager = userManagerFactory.createUserManager()

        val userFact: UserFactory = new UserFactory()
        userFact.setName("myNewUser")
        userFact.setPassword("secret")
        userFact.setHomeDirectory("ftproot")
        val user: User = userFact.createUser()
        userManager.save(user)

        serverFactory.setUserManager(userManagerFactory.createUserManager())

        // start the server
        val server: FtpServer = serverFactory.createServer()
        server.start()
    }
}

代码有效,服务器似乎从端口2221开始,但我无法连接到它:ftp: localhost:2221: No address associated with hostnameftp: 127.0.0.1:2221: Name or service not known

有什么想法吗?

1 个答案:

答案 0 :(得分:3)

我做错了两件事:

  1. 我使用命令ftp localhost:2221连接到ftp服务器,而不是正确的方式(使用空格而不是冒号)ftp localhost 2221
  2. 我创建了一个UserManager,但从未结束使用它。我将serverFactory.setUserManager(userManagerFactory.createUserManager())更改为serverFactory.setUserManager(userManager)