Java大法一统天下。遇到任何问题,先查一下Java中的解决方案。
地球上的许多事情,在Java中都能找到完美的解决方案。
FtpServer是apache MINA项目的一个子项目,它实现了一个ftp服务器,与vsftpd是同类产品.
Filezilla是一个可视化的ftp服务器.

Ftp客户端也有很多,如Filezilla,FlashFXP,SmartFtp等,其中只有Filezilla是免费的.
之前搭建ftp服务器使用的是vsftpd,现在可以把它卸掉了,它以服务的形式运行,并且它包含很多我所不知道的东西。

使用步骤

  1. wget url下载压缩包
  2. tar-zxvf解压ftpserver
  3. 进入bin目录,更改ftpd.sh,添加JAVA_HOME变量
  4. 输入指令:./ftpd.sh res/conf/ftpd-typical.xml & 其中‘&’表示后台运行.

在ftpd-typical.xml中可以更改密码,这里的密码是MD5加密了的。用一段Python代码来实现:

import hashlibmd5 = hashlib.md5()
md5.update(bytes("xxxxxx", encoding='utf8'))
ans = md5.hexdigest()
print(ans)

运行之后,将所得MD5字符串粘贴到ftpd-typical.xml中即可。

一开始ftpd-typical.xml中只有两个用户,一个是admin,一个是anonymous。
可以更改ftpserver.user.admin.homedirectory属性,自定义上传文件的根目录。
最好把ftpserver.user.anonymous.enableflag置为false,这样比较安全。

使用FileZilla进行连接时,点击“文件-站点管理器-新建”进行如下设置:

这里要注意

  • ftpd.sh中有一句cd $FTPD_HOME,这就使得这个程序的当前目录变成了$FTPD_HOME.
    如果ftpd-typical.xml路径不对,会一直报"文件未找到"异常.
  • ftpd.sh需要提供配置文件名称作为参数,它的行为取决于ftpd.xml的配置,一般情况下,使用ftpd-typical已经足够了.如果不知道ftpd.xml怎么配置,可以参考ftpd-full.xml,这个文件列出了所有的参数.
  • 默认情况下,用户名和密码都是admin,端口号为2121。
    ftp的默认端口号为21,http默认端口号为80,tomcat默认端口号为8080,django默认端口号8000。
    因为1024以内的端口号是不允许随便占用的,而1024以后的却可以.所以,要想占用1024以内的端口号,就要通过sudo命令.
  • 默认情况下,user.properties中的用户密码是md5加密的,要想不加密,需要更改ftpd-typical.xml.匿名用户对于服务器上的文件是只读的,这可以在user.properties中设置权限.

问题到这里并没有结束,当退出shell之后,ftpd也就跟着停止运行了。
这个问题就是:在linux shell关闭后,程序如何才能继续运行?

程序脱离shell后台运行

(1)方案一
CTRL+Z暂停程序,bg [作业号]将程序后台运行.这一步相当于使用[命令名]&运行程序.
对于后台运行的程序,它只是不占用shell了,但它仍然是shell的子程序,shell一死,它仍然要跪.所以需要使用命令
disown -h %1来把这个程序"不属于"shell.

bg是把程序放到后台,fg是把程序调到前台.

用jobs命令查看当前作业.jobs -l查看作业列表.

当使用disown把程序解除之后,可以通过ps -e | grep bash 命令查看这个程序,可以kill之.

(2)方案二

SIGHUP是linux中信号的一种,表示hang up(挂起)信号.当shell收到SIGHUP信号时,shell的儿子们也会收到这个信号.

nohup ./haha.sh arg1 arg2 arg3 &

默认情况下,haha.sh运行过程中的一切输出都写入到了~/nohup.out文件中,注意要让nohup在后台运行,所以加上"&".

然后ps -ex | grep haha,就可以看见这个程序了.

关闭当前shell,重新打开一个,仍旧ps -ex | grep haha,发现还在运行着.

(3)方案三:使用screen/tmux

方案二是最完美的解决方案,更改ftpd.sh,把其中最后运行Java的那句话用nohup重写一遍,把错误信息输出到控制台下,让这个程序后台执行

eval "$JAVACMD" -classpath "$FTPD_CLASSPATH" "$MAIN_CLASS" "$CONFIG_FILE" 2>&1 "&"

(4)方案四:使用supervisor管理进程
(5)方案五:将ftpd设置成服务

测试和异常

如何测试一个ftp服务器是不是好使?方法一:打开浏览器输入ftp://ip地址:端口号;方法二:使用filezilla.

如果filezilla报错"收到服务器的 TLS 警告: Handshake failed (40)",文件>站点管理>新建站点,加密方式选择:只是用普通ftp,这种方式不太安全.

今天使用Filezilla上传文件总是失败,一直显示

错误: 20 秒后无活动,连接超时
错误: 文件传输失败

用FlashFXP却可以很正常上传文件,但FlashFXP试用期只有30天,网上搜索注册码未果,遂想学学java实现ftp文件上传,FtpServer也有一个对应的客户端库。

转载于:https://www.cnblogs.com/weiyinfu/p/6505072.html

使用Apache FtpServer相关推荐

  1. apache ftpserver java开发_apache FTPserver安装

    本文将为您描述apache FTPserver安装,具体完成步骤: ​apache ftp server 安装简单,可移植性强,可在linux和windows上运行.下面总结一下安装步骤 〇.环境准备 ...

  2. java.net.SocketException和错误:org.apache.ftpserver.FtpServerConfigurationException

    这两个错误师出同门,都是端口被占用 java.net.SocketException: errno:13)at sun.nio.ch.Net.bind(Native Method)at sun.nio ...

  3. [Android]Android FTP server based on Apache FTPServer

    老板让做的用Android做热点,同时作为FTP服务器.网上的都在吐槽其他人的不好使,结果页没有一个能好使的,最后还是靠Stack Overflow完成了初试验! 在我的电脑或者浏览器里输入FTP地址 ...

  4. Apache FtpServer配置步骤总结

    Apache旗下的FtpServer(免费开源,跨平台,java语言编写)配置步骤总结 1.在windows服务器安装jre,下载jre7,并安装.(java运行环境),经过实验,不必安装jdk. 2 ...

  5. Linux Apache FTP-Server架设

    1.下载apache-ftpserver-1.0.6.tar.gz (http://download.csdn.net/detail/lnniyunlong99/9837284:http://mina ...

  6. android :FTPServer

    http://mina.apache.org/ftpserver-project/downloads.html 下载:http://mina.apache.org/ftpserver-project/ ...

  7. Spark 1.2 编译

    1:下载 wget http://d3kbcqa49mib13.cloudfront.net/spark-1.2.0.tgz [jifeng@feng02 hadoop]$ wget http://d ...

  8. android 检测网络ftp,Android端与Android端利用WIFI进行FTP通信

    一.客户端通信工具类: import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; im ...

  9. topaz全家桶中文_apache 开源项目全家桶 2020年12月中文介绍

    apache项目全家桶 很多apache开源项目特别好,但是没什么能汇总的文档,我来整一个,不定期更新 big-data (50): Project Apache Accumulo star :838 ...

最新文章

  1. rsync同步和备份文件到本地
  2. numpy 笔记:setdiff1d
  3. Android 和 Chrome OS 融合的可能性
  4. Eclipse,以及tomcat使用时可能会遇到的几个问题
  5. selenium===使用docker搭建selenium分布式测试环境
  6. if laytpl 非_Layui-神奇的layui.laytpl
  7. php发布post到wordpress,PHP-如何将数据发布到wordpress插件?
  8. 如何选型商业智能和分析平台,Gartner给了这些建议!
  9. 光凭 5G 根本无法解决宽带问题!
  10. js日期操作,某天的N天后,一个月后的日期
  11. Android 反编译三种方式
  12. C语言大一上学期总结
  13. caffe的Leveldb格式数据一(官方介绍)
  14. ,英式发音和美式发音有什么区别
  15. CDA二级易错点总结
  16. Android源码解析之日志系统Logcat
  17. html隐藏超链接下划线
  18. jupyterlab:Failed to load the jupyterlab-git server extension问题如何解决?
  19. 【Java练习】青蛙跳台阶问题
  20. HTML标签---列表标签和表格标签

热门文章

  1. Ubuntu 18.04下Couldn't connect to Docker daemon at http+docker://localunixsocket解决办法
  2. Sasha and a Very Easy Test CodeForces - 1109E (数学,线段树)
  3. 行测(爆发篇)之语句表达,像说话一样自然
  4. java代理模式与装饰者模式
  5. 05使用jmeter里调试一个下单接口
  6. django “如何”系列4:如何编写自定义模板标签和过滤器
  7. Neutron/ML2学习
  8. asp.net mvc源码分析-Action篇 Action的执行
  9. 【转】Treeview 无限分类非递归终极解决方案
  10. linux shell脚本date命令 按照不同格式输出