java - Apache Mina Java FTP 服务器实现 - 客户端卡住等待欢迎消息
问题描述
我正在为一个项目用 Java 实现一个 FTP 服务器。我可以启动服务器,但是当我尝试与客户端连接时,它卡在“等待欢迎消息”上。我看过几个例子,但我不确定我哪里出错了。这是我的课。我最终会将其中的一些分解为其他方法。
出于本文的目的,用户参数已被清除。
public class FTPServer {
final int PORT = 2221;
String userfile = "";
String username="";
String password = ""
String homedir ="";
private FtpServer server=null;
public FTPServer() {}
public FTPServer(final String ipaddress, final int port){
FtpServerFactory serverFactory = new FtpServerFactory();
ListenerFactory listenerfactory = new ListenerFactory();
listenerfactory.setDataConnectionConfiguration(
new DataConnectionConfigurationFactory().createDataConnectionConfiguration());
ConnectionConfigFactory connection = new ConnectionConfigFactory();
connection.setMaxLoginFailures(10);
connection.setLoginFailureDelay(5);
connection.setAnonymousLoginEnabled(false);
// set the ip address of the listener
listenerfactory.setServerAddress(ipaddress);
// set the port of the listener
if (port == 0)
{ listenerfactory.setPort(PORT);}
else {listenerfactory.setPort(port);
// replace the default listener
serverFactory.addListener("default", listenerfactory.createListener());
serverFactory.setConnectionConfig(connection.createConnectionConfig());
}
PropertiesUserManagerFactory userManagerFactory = new PropertiesUserManagerFactory();
userManagerFactory.setFile(new File(userfile));
userManagerFactory.setPasswordEncryptor(new SaltedPasswordEncryptor());
UserManager um = userManagerFactory.createUserManager();
BaseUser user = new BaseUser();
user.setName(username);
user.setPassword(password);
user.setHomeDirectory(homedir);
try {
um.save(user);
} catch (FtpException e1) {
// TODO Auto-generated catch block
this.StopServer();
e1.printStackTrace();
}
serverFactory.setUserManager(um);
server = serverFactory.createServer();
}
public void StopServer(){ this.server.stop(); }
public void StartServer()
{
try {
server.start();
} catch (FtpException e) {
// handle this eventually, good enough for testing now
e.printStackTrace();
}
}
这是创建服务器并启动和停止它的代码
final int port = 0;
final String ipaddress = "";
FTPServer server = new FTPServer(ipaddress,port);
server.StartServer();
server.StopServer();
解决方案
我会说FtpServer.Start
只开始监听传入端口。它不会阻塞。之后,您通过调用 立即终止服务器.Stop
。
您必须在代码中明确等待以保持服务器运行。
server.StartServer();
Thread.sleep(Long.MAX_VALUE);
推荐阅读
- node.js - NodeJS将对象json打印到html
- sql-server - 连续三周找订单
- html - 定位 div 相对于父级的高度
- amazon-web-services - 用于访问密钥/秘密密钥授权的 AWS IAM API Cloudformation 帮助
- azure - Visual Studio 中缺少 Azure Function App 发布目标
- r - 用每组的前一行中的值替换 NA
- javascript - 带有 Active Directory 插件的 React 应用程序出现 CORS 错误
- php - 用户使用 PHP PDO 和 AJAX 登录
- angular - 将 TypeScript 全局变量与 SharePoint 函数一起使用
- android - 如何将我的按钮设置为背景的随机颜色。安卓