用 java 实现FTP SERVER(附源码)

前面用 PYTHON 实现了一个 ftp server(参考这里) ,有朋友问有没有java版本的,其实说白了,ftp 也就是 tcp/ip 协议的一个应用而已,而tcp/ip 基本都是通过socket来传输指令或数据,只要客户端和服务端定义好沟通协议就好了。FTP 是有一套标准的,只要按这套标准去做,就可以实现一个FTP服务器。
下面的程序实现了一套简单的基于java的ftp server,你可以自己加上自己需要的东西,暂时这个FTP SERVER 有如下功能:
1 一个实现了的ftp服务器基本功能程序,服务器的安全管理代码还没有开发,
但该程序已经可以适用于网络。

2 该ftp服务器还具有一些管理功能,主要是
针对用户管理的,有如下命令:
  list、listuser、adduser、deluser、help、?。
  list 列出连接用户信息
  listuser 列出所有用户信息
  adduser 新增用户
  deluser 删除用户
  help 显示帮助,列出以上指定
“?” 同help功能相同

3 关于用户的权限设置,还未开发,因此所有登陆的用户的都具有最高权限,

4 有2个缺省用户:
   user:jxd password:111
   user:good  password:public

5 用户信息在同目录下的user.cfg中,
  注意用户信息的书写,一个用户的信息占一行:
  user|password|directory|

6 在eclipse下新建一Java项目 将FtpServer.java放入你所建的项目文件夹下,
并将user.cfg配制文件放入该项目文件夹下。
编译运行FtpServer.java 服务启动
会显示 “ftp server started!”
服务启动 即可操作指令。(部分操作指令见附件。)

7 客户端可以通过本地机操作系统自带Ftp客户端连接 ftp server.
具体操作:
开始->运行
输入 "cmd" 调出控制台
在控制台输入 ftp 192.168.1.104          
即可连接 。
当连接成功会显示Connection to 192.168.1.104   //192.168.1.104为服务器的IP
并提示你当前登入服务器的人数。
然后输入你要操作的指令(部分操作指令见附件。)
当连接不成功则会显示 Unknown host 192.168.1.104

服务器端的部分指令例子:
程序代码 程序代码

->adduser
please enter username:jxd
enter password :public
enter the initial directory: d

->list
1:jxd From /192.168.1.104
->listuser
username          workdirectory
ruan              e:/incoming
wen              d:/incoming

->?
adduser :add new user
deluser <username> :delete a user
quit  :quit
list  :list all user connect to server
listuser : list all account of this server
help :show  this help

->help
adduser :add new user
deluser <username> :delete a user
quit  :quit
list  :list all user connect to server
listuser : list all account of this server
help :show  this help

->deluser jxd
User jxd deleted


客户端指令例子:
程序代码 程序代码

ftp> ?
Commands may be abbreviated.  Commands are:

!               delete          literal         prompt          send
?               debug           ls              put             status
append          dir             mdelete         pwd             trace
ascii           disconnect      mdir            quit            type
bell            get             mget            quote           user
binary          glob            mkdir           recv            verbose
bye             hash            mls             remotehelp
cd              help            mput            rename
close           lcd             open            rmdir


ftp> !
Microsoft Windows XP [版本 5.1.2600]
(C) 版权所有 1985-2001 Microsoft Corp.

ftp> DELE dd.txt
250 Request file action ok,complete

ftp> literal
Command line to send
Usage: literal line to send.

ftp> prompt
Interactive mode Off .

ftp> send
Local file d:\22.txt
Remote file d:\incoming\22.txt

ftp> debug
Debugging On .

ftp> ls
---> PORT 192,168,1,104,5,244
200 Command okay
---> NLST
200 Command okay


ftp> put
Local file c:001.txt
Remote file d:\incoming

ftp> get 1222.txt
200 Command okay
150 Opening Binary mode data connection for d:\incoming/1222.txt
226 Transfer complete !

ftp> status
Connected to 192.168.1.104.
Type: ascii; Verbose: On ; Bell: Off ; Prompting: Off ; Globbing: On
Debugging: Off ; Hash mark printing: Off .

ftp> append
Local file c:\
Remote file d:\incoming

ftp> dir
200 Command okay
150 Opening ASCII mode data connection for /bin/ls.
d aa
- FtpServer.java
d mkd
226 Transfer complete !
ftp: 收到 31 字节,用时 0.00Seconds 31000.00Kbytes/sec.

ftp> mdelete
Remote files ff.txt
200 Command okay Change to ASCII mode

ftp> pwd
257 d:\incoming is current directory.

ftp> ascii
200 Command okay Change to ASCII mode

ftp> mdir
Remote files incoming\ff.txt
Local file c:\001.txt
output to local-file: c:\001.txt?
200 Command okay
226 Transfer complete !

ftp> recv
Remote file ff.txt
Local file C:\Documents and Settings\jxd
200 Command okay
150 Opening Binary mode data connection for d:\incoming/ff.txt
226 Transfer complete !

ftp> verbose
Verbose mode Off .

ftp> bye

C:\Documents and Settings\jxd>

ftp> hash
Hash mark printing On  ftp: (2048 bytes/hash mark) .

ftp> mls
Remote files -
Local file -
200 Command okay
200 Command okay

ftp> remotehelp
200 Command okay

ftp> cd
Remote directory d:\incoming
250 Requested file action okay, directory change to d:\incoming

ftp> help
Commands may be abbreviated.  Commands are:

!               delete          literal         prompt          send
?               debug           ls              put             status
append          dir             mdelete         pwd             trace
ascii           disconnect      mdir            quit            type
bell            get             mget            quote           user
binary          glob            mkdir           recv            verbose
bye             hash            mls             remotehelp
cd              help            mput            rename
close           lcd             open            rmdir

ftp> mput
Local files c:\001.txt
mput c:\001.txt?
200 Command okay
150 Opening Binary mode data connection for d:\incoming/001.txt
226 Transfer complete !

ftp> rename
From name d:\incoming\001.txt
To name 99.txt
226 Transfer complete !

ftp> Lcd
Local directory now C:\Documents and Settings\jxd.

ftp> open
Already connected to 192.168.1.104, use disconnect first.

ftp> rmdir
Directory name 目录名字

ftp> close
221 Service closing control connection


源代码,打包如下,有兴趣的可以下载:
下载文件 点击下载此文件

除非申明,文章均为一号门原创,转载请注明本文地址,谢谢!
[本日志由 轻舞肥羊 于 2012-11-11 06:20 PM 编辑]
文章来自: 本站原创
引用通告: 查看所有引用 | 我要引用此文章
Tags: java ftp
相关日志:
评论: 0 | 引用: 0 | 查看次数: -
发表评论
昵 称:
密 码: 游客发言不需要密码.
内 容:
验证码: 验证码
选 项:
虽然发表评论不用注册,但是为了保护您的发言权,建议您注册帐号.