首 页 网络编程
网页制作 图形图象 操作系统 冲浪宝典
软件教学 认证考试

网络安全 网络办公 行业资讯 评测对比
您当前位置:站长天空 -> 操作系统-> Linux教程
用Java实现FTP服务器-JSP教程,Java技巧及代码
作者:网友供稿 点击:66
推荐
西部数码-全国虚拟主机10强!20余项虚拟主机管理功能,全国领先!第6代双线路虚拟主机,南北访问畅通无阻!可在线rar解压,自动数据恢复设置虚拟目录等.免费赠送访问统计,企业邮局.Cn域名注册10元/年,自助建站480元起,免费试用7天,满意再付款!P4主机租用799元/月.月付免压金
站内搜索
文章页数:[1] 
ftp 命令 

  ftp 的主要操作都是基于各种命令基础之上的。常用的命令有: 

  ◆ 设置传输模式,它包括ascⅱ(文本) 和binary 二进制模式; 

 
  ◆ 目录操作,改变或显示远程计算机的当前目录(cd、dir/ls 命令); 

  ◆ 连接操作,open命令用于建立同远程计算机的连接;close命令用于关闭连接; 

  ◆ 发送操作,put命令用于传送文件到远程计算机;mput 命令用于传送多个文件到远程计算机; 

  ◆ 获取操作,get命令用于接收一个文件;mget命令用于接收多个文件。 

  编程思路 

  根据ftp 的工作原理,在主函数中建立一个服务器套接字端口,等待客户端请求,一旦客户端请求被接受,服务器程序就建立一个服务器分线程,处理客户端的命令。如果客户端需要和服务器端进行文件的传输,则建立一个新的套接字连接来完成文件的操作。 

  编程技巧说明 

  1.主函数设计 

  在主函数中,完成服务器端口的侦听和服务线程的创建。我们利用一个静态字符串变量initdir 来保存服务器线程运行时所在的工作目录。服务器的初始工作目录是由程序运行时用户输入的,缺省为c盘的根目录。 

  具体的代码如下: 

public class ftpserver extends thread{ 
private socket socketclient; 
private int counter; 
private static string initdir; 
public static void main(string[] args){ 
if(args.length != 0) { 
initdir = args[0]; 
}else{ initdir = "c:";} 
int i = 1; 
try{ 
system.out.println("ftp server started!"); 
//监听21号端口 
serversocket s = new serversocket(21); 
for(;;){ 
//接受客户端请求 
socket incoming = s.accept(); 
//创建服务线程 
new ftpserver(incoming,i).start(); 
i++; 

}catch(exception e){} 

2. 线程类的设计 

  线程类的主要设计都是在run()方法中实现。用run()方法得到客户端的套接字信息,根据套接字得到输入流和输出流,向客户端发送欢迎信息。 

  3. ftp 命令的处理 

  (1) 访问控制命令 

  ◆ user name(user) 和 password (pass) 命令处理代码如下: 

if(str.startswith("user")){ 
user = str.substring(4); 
user = user.trim(); 
out.println("331 password");} 
if(str.startswith("pass")) 
out.println("230 user "+user+" logged in."); 

  user 命令和 password 命令分别用来提交客户端用户输入的用户名和口令。 

  ◆ cwd (change working directory) 命令处理代码如下: 

if(str.startswith("cwd")){ 
string str1 = str.substring(3); 
dir = dir+"/"+str1.trim(); 
out.println("250 cwd command succesful"); 


  该命令改变工作目录到用户指定的目录。 

  ◆ cdup (change to parent directory) 命令处理代码如下: 

if(str.startswith("cdup")){ 
int n = dir.lastindexof("/"); 
dir = dir.substring(0,n); 
out.println("250 cwd command succesful"); 


  该命令改变当前目录为上一层目录。 

  ◆ quit命令处理代码如下: 

if(str.startswith("quit")) { 
out.println("good bye"); 
done = true; 


  该命令退出及关闭与服务器的连接,输出good bye。 

  (2) 传输参数命令 

  ◆ port命令处理代码如下: 

if(str.startswith("port")) { 
out.println("200 port command successful"); 
int i = str.length() - 1; 
int j = str.lastindexof(","); 
int k = str.lastindexof(",",j-1); 
string str1,str2; 
str1=""; 
str2=""; 
for(int l=k+1;lstr1 = str2 + str.charat(l); 

for(int l=j+1;l<=i;l++){ 
str2 = str2 + str.charat(l); 

tempport = integer.parseint(str1) * 16 *16 +integer.parseint(str2); 


  使用该命令时,客户端必须发送客户端用于接收数据的32位ip 地址和16位 的tcp 端口号。这些信息以8位为一组,使用十进制传输,中间用逗号隔开。 

  ◆ type命令处理代码如下: 

if(str.startswith("type")){ 
out.println("200 type set"); 



  type 命令用来完成类型设置。 

  (3) ftp 服务命令 

  ◆ retr (reteieve) 和 store (store)命令处理的代码 

if(str.startswith("retr")){ 
out.println("150 binary data connection"); 
str = str.substring(4); 
str = str.trim(); 
randomaccessfile outfile = new 
randomaccessfile(dir+"/"+str,"r"); 
socket tempsocket = new socket(host,tempport); 
outputstream outsocket 
= tempsocket.getoutputstream(); 
byte bytebuffer[]= new byte[1024]; 
int amount; 
try{ 
while((amount = outfile.read(bytebuffer)) != -1){ 
outsocket.write(bytebuffer, 0, amount); 

outsocket.close(); 
out.println("226 transfer complete"); 
outfile.close(); 
tempsocket.close(); 

catch(ioexception e){} 

if(str.startswith("stor")){ 
out.println("150 binary data connection"); 
str = str.substring(4); 
str = str.trim(); 
randomaccessfile infile = new 
randomaccessfile(dir+"/"+str,"rw"); 
socket tempsocket = new socket(host,tempport); 
inputstream insocket 
= tempsocket.getinputstream(); 
byte bytebuffer[] = new byte[1024]; 
int amount; 
try{ 
while((amount =insocket.read(bytebuffer) )!= -1){ 
infile.write(bytebuffer, 0, amount); 

insocket.close(); 
out.println("226 transfer complete"); 
infile.close(); 
tempsocket.close(); 

catch(ioexception e){} 


  文件传输命令包括从服务器中获得文件retr和向服务器中发送文件stor,这两个命令的处理非常类似。处理retr命令时,首先得到用户要获得的文件的名称,根据名称创建一个文件输入流,然后和客户端建立临时套接字连接,并得到一个输出流。随后,将文件输入流中的数据读出并借助于套接字输出流发送到客户端,传输完毕以后,关闭流和临时套接字。 

  stor 命令的处理也是同样的过程,只是方向正好相反。 

  ◆ dele (delete)命令处理代码如下: 

if(str.startswith("dele")){ 
str = str.substring(4); 
str = str.trim(); 
file file = new file(dir,str); 
boolean del = file.delete(); 
out.println("250 delete command successful"); 


  dele 命令用于删除服务器上的指定文件。 

  ◆ list命令处理代码如下: 

if(str.startswith("list")) { 
try{ 
out.println("150 ascii data"); 
socket tempsocket = new socket(host,tempport); 
printwriter out2= new printwriter(tempsocket.getoutputstream(),true); 
file file = new file(dir); 
string[] dirstructure = new string[10]; 
dirstructure= file.list(); 
string strtype=""; 
for(int i=0;iif( dirstructure[i].indexof(".") == -1) { 
strtype = "d ";} 
else 
{strtype = "- ";} 
out2.println(strtype+dirstructure[i]); 

tempsocket.close(); 
out.println("226 transfer complete"); 

catch(ioexception e){} 

  list 命令用于向客户端返回服务器中工作目录下的目录结构,包括文件和目录的列表。处理这个命令时,先创建一个临时的套接字向客户端发送目录信息。这个套接字的目的端口号缺省为1,然后为当前工作目录创建file 对象,利用该对象的list()方法得到一个包含该目录下所有文件和子目录名称的字符串数组,然后根据名称中是否含有文件名中特有的“.”来区别目录和文件。最后,将得到的名称数组通过临时套接字发送到客户端。 

文章整理:站长天空 网址:http://www.z6688.com/
以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

文章页数:[1] 


放大字体显示 缩小字体显示 打印文章 推荐给朋友
热门文章
·最简单的Struts程序-JSP教程,资料/其它
·利用激光供电的光电电流互感器
·java到structs-JSP教程,Java技巧及代码
·鼠标样式,整体背景图,滚动条的效果(网页效果)-ASP教程,ASP应用
·ASP中正则表达式的应用-ASP教程,正则表达式
·XML应用-利用XML 与XSL-.NET教程,XML应用
·.net 下用javascript调用webservice-.NET教程,Web Service开发
·Asp无组件上传进度条解决方案-ASP教程,组件开发
·破译动网验证码的简单方法-.NET教程,评论及其它
·linux系统文件命令精通指南(上)
最新文章
·mashups+ajax打造全新web开发_ajax教程
·windows vista系统中写字板应用全攻略_windows vista
·adsense单价持续低迷的解读_网赚技巧
·google反作弊小组成员专访_站长访谈
·端午议话:谈网站的特色_站长心得
·浅谈我的十点论坛管理经验_站长心得
·如何针对msn的onpage进行网页优化_站长心得
·用google 搜索框黏住易变的访问者_google推广
·google关键词广告每次点击付费(ppc)术语表_google推广
·确保万无一失的google 关键词广告公式_google推广
相关主题
  • 用javascript实现select的美化_javascript教程
  • 用javascript 转换外部链接样式_javascript教程
  • 用javascript+php随机显示图片_javascript教程
  • 用javascript实现字符串切分功能_javascript教程
  • 用javascript轻松制作一套简单的抽奖系统_javascript教程
  • 西部数码虚拟主机

    友情链接
    CNNIC 西部数码
    万网 自助建站
    虚拟主机 asp空间
    域名注册 域名
    域名申请 主页空间
    论坛空间 网站空间
    国际域名 虚拟空间
    空间租用 DDOS防火墙
    成都主机托管 四川主机托管
    主机租用 服务器租用
    网站目录 自助建站
    虚拟主机 网址大全
    软件下载
    自助链接
    虚拟主机资讯 特价虚拟主机
    版权申明:本站文章均来自网络,如有侵权,请联系我们,我们收到后立即删除,谢谢!
    关于我们:站长天空:专业提供最新的站长资讯、在线教程、虚拟主机权威评测、虚拟主机性能对比、网站制作教程,开发教程,站长工具。包括网页制作教程、冲浪宝典、编程参考、操作系统、软件教学、行业动态等。
    特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有。
    发表评论 打印  刷新     关闭