Hi, folks

I'm now using Ftp Server v1.0.4 in my Android app, generally speaking, it's
working fine on Android 2.1 but I've found that some of my users may face a
configuration related error, here's the stack trace:

Uncaught handler: thread main exiting due to uncaught exception
java.lang.RuntimeException: Unable to start service
xcxin.ftpserver.ftpserv...@440b1ae0 with Intent {
cmp=xcxin.filexpert/xcxin.ftpserver.FtpService }:
org.apache.ftpserver.FtpServerConfigurationException: Failed to bind to
address 0.0.0.0/0.0.0.0:2211, check configuration
    at
android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2882)
    at android.app.ActivityThread.access$3500(ActivityThread.java:119)
    at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1926)
    at android.os.Handler.dispatchMessage(Handler.java:99)
    at android.os.Looper.loop(Looper.java:123)
    at android.app.ActivityThread.main(ActivityThread.java:4363)
    at java.lang.reflect.Method.invokeNative(Native Method)
    at java.lang.reflect.Method.invoke(Method.java:521)
    at
com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:860)
    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:618)
    at dalvik.system.NativeStart.main(Native Method)
Caused by: org.apache.ftpserver.FtpServerConfigurationException: Failed to
bind to address 0.0.0.0/0.0.0.0:2211, check configuration
    at
org.apache.ftpserver.listener.nio.NioListener.start(NioListener.java:183)
    at
org.apache.ftpserver.impl.DefaultFtpServer.start(DefaultFtpServer.java:80)
    at xcxin.ftpserver.FtpService.onStart(FtpService.java:86)
    at android.app.Service.onStartCommand(Service.java:306)
    at
android.app.ActivityThread.handleServiceArgs(ActivityThread.java:2873)
    ... 10 more
Caused by: java.net.BindException: The address is already in use
    at
org.apache.harmony.luni.platform.OSNetworkSystem.socketBindImpl(Native
Method)
    at
org.apache.harmony.luni.platform.OSNetworkSystem.bind(OSNetworkSystem.java:107)
    at
org.apache.harmony.luni.net.PlainSocketImpl.bind(PlainSocketImpl.java:184)
    at java.net.ServerSocket.bind(ServerSocket.java:414)
    at
org.apache.harmony.nio.internal.ServerSocketChannelImpl$ServerSocketAdapter.bind(ServerSocketChannelImpl.java:213)
    at
org.apache.mina.transport.socket.nio.NioSocketAcceptor.open(NioSocketAcceptor.java:248)
    at
org.apache.mina.transport.socket.nio.NioSocketAcceptor.open(NioSocketAcceptor.java:48)
    at
org.apache.mina.core.polling.AbstractPollingIoAcceptor.registerHandles(AbstractPollingIoAcceptor.java:521)
    at
org.apache.mina.core.polling.AbstractPollingIoAcceptor.access$200(AbstractPollingIoAcceptor.java:65)
    at
org.apache.mina.core.polling.AbstractPollingIoAcceptor$Acceptor.run(AbstractPollingIoAcceptor.java:405)
    at
org.apache.mina.util.NamePreservingRunnable.run(NamePreservingRunnable.java:64)
    at
java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1068)
    at
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:561)

Seems it's a binding error, but I don't know where I am wrong, below is
code fragment I used in my app to configure the ftp server:

String user = settings.getFtpUserName();
String pass = settings.getFtpPassword();
SimpleAuth myAuth = new SimpleAuth();
List<Authority> auth_list = new ArrayList<Authority>();
auth_list.add(myAuth);
super.onStart(intent, startId);
// Create User
userFactory.setName(user);
userFactory.setPassword(pass);
userFactory.setHomeDirectory(root);
userFactory.setEnabled(true);
userFactory.setAuthorities(auth_list);
// Setup the User Mgr
userMgrFactory.setAdminName(user);
serverFactory.setUserManager(userMgrFactory.createUserManager());
// Get User Mgr
UserManager userMgr = serverFactory.getUserManager();
try {
userMgr.save(userFactory.createUser());
} catch (FtpException e) {
Log.v("FE", "Can not create user: " + e.toString());
this.stopSelf();
}
// Set Port
factory.setPort(settings.getFtpPort());
// Set Passive Ports
dataConnFactory.setPassivePorts("4000-4199");
factory.setDataConnectionConfiguration(dataConnFactory.createDataConnectionConfiguration());
// Replace with default listener
serverFactory.addListener("default", factory.createListener());
// Create Server
ftpServer = serverFactory.createServer();
// Start Service
try {
ftpServer.start();
} catch (FtpException e) {
Log.v("FE", "Can not start ftp server: " + e.toString());
this.stopSelf();
}

Could someone please help me to see where I am wrong? Thank you!

Alex

Reply via email to