仓酷云

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 1930|回复: 20
打印 上一主题 下一主题

[学习教程] JAVA网站制作之用Java完成FTP服务器

[复制链接]
柔情似水 该用户已被删除
跳转到指定楼层
楼主
发表于 2015-1-18 11:53:59 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
再说第三点:我并没有提到服务器也要整合,然后是IDE,一个好的IDE能够200%提高开发的速度,就说图形方面:你是经过简单托拽和点击就能实现功能好那。ftp服务器FTP命令

  FTP的次要操纵都是基于各类命令基本之上的。经常使用的命令有:

  ◆设置传输形式,它包含ASCⅡ(文本)和BINARY二进制形式;


  ◆目次操纵,改动或显现远程盘算机确当前目次(cd、dir/ls命令);

  ◆毗连操纵,open命令用于创建同远程盘算机的毗连;close命令用于封闭毗连;

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

  ◆猎取操纵,get命令用于吸收一个文件;mget命令用于吸收多个文件。

  编程思绪

  依据FTP的事情道理,在主函数中创建一个服务器套接字端口,守候客户端哀求,一旦客户端哀求被承受,服务器程序就创建一个服务器分线程,处置客户真个命令。假如客户端必要和服务器端举行文件的传输,则创建一个新的套接字毗连来完成文件的操纵。

  编程技能申明

  1.主函数计划

  在主函数中,完成服务器端口的侦听和服务线程的创立。我们使用一个静态字符串变量initDir来保留服务器线程运转时地点的事情目次。服务器的初始事情目次是由程序运转时用户输出的,缺省为C盘的根目次。

  详细的代码以下:

publicclassftpServerextendsThread{
privateSocketsocketClient;
privateintcounter;
privatestaticStringinitDir;
publicstaticvoidmain(String[]args){
if(args.length!=0){
initDir=args[0];
}else{initDir="c:";}
inti=1;
try{
System.out.println("ftpserverstarted!");
//监听21号端口
ServerSockets=newServerSocket(21);
for(;;){
//承受客户端哀求
Socketincoming=s.accept();
//创立服务线程
newftpServer(incoming,i).start();
i++;
}
}catch(Exceptione){}
}
2.线程类的计划

  线程类的次要计划都是在run()办法中完成。用run()办法失掉客户真个套接字信息,依据套接字失掉输出流和输入流,向客户端发送接待信息。

  3.FTP命令的处置

  (1)会见把持命令

  ◆username(user)和password(pass)命令处置代码以下:

if(str.startsWith("USER")){
user=str.substring(4);
user=user.trim();
out.println("331Password");}
if(str.startsWith("PASS"))
out.println("230User"+user+"loggedin.");

  User命令和Password命令分离用来提交客户端用户输出的用户名和口令。

  ◆CWD(CHANGEWORKINGDIRECTORY)命令处置代码以下:

if(str.startsWith("CWD")){
Stringstr1=str.substring(3);
dir=dir+"/"+str1.trim();
out.println("250CWDcommandsuccesful");
}

  该命令改动事情目次到用户指定的目次。

  ◆CDUP(CHANGETOPARENTDIRECTORY)命令处置代码以下:

if(str.startsWith("CDUP")){
intn=dir.lastIndexOf("/");
dir=dir.substring(0,n);
out.println("250CWDcommandsuccesful");
}

  该命令改动以后目次为上一层目次。

  ◆QUIT命令处置代码以下:

if(str.startsWith("QUIT")){
out.println("GOODBYE");
done=true;
}

  该命令加入及封闭与服务器的毗连,输入GOODBYE。

  (2)传输参数命令

  ◆Port命令处置代码以下:

if(str.startsWith("PORT")){
out.println("200PORTcommandsuccessful");
inti=str.length()-1;
intj=str.lastIndexOf(",");
intk=str.lastIndexOf(",",j-1);
Stringstr1,str2;
str1="";
str2="";
for(intl=k+1;lstr1=str2+str.charAt(l);
}
for(intl=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("200typeset");
}


  TYPE命令用来完成范例设置。

  (3)FTP服务命令

  ◆RETR(RETEIEVE)和STORE(STORE)命令处置的代码

if(str.startsWith("RETR")){
out.println("150Binarydataconnection");
str=str.substring(4);
str=str.trim();
RandomAccessFileoutFile=new
RandomAccessFile(dir+"/"+str,"r");
SockettempSocket=newSocket(host,tempPort);
OutputStreamoutSocket
=tempSocket.getOutputStream();
bytebyteBuffer[]=newbyte[1024];
intamount;
try{
while((amount=outFile.read(byteBuffer))!=-1){
outSocket.write(byteBuffer,0,amount);
}
outSocket.close();
out.println("226transfercomplete");
outFile.close();
tempSocket.close();
}
catch(IOExceptione){}
}
if(str.startsWith("STOR")){
out.println("150Binarydataconnection");
str=str.substring(4);
str=str.trim();
RandomAccessFileinFile=new
RandomAccessFile(dir+"/"+str,"rw");
SockettempSocket=newSocket(host,tempPort);
InputStreaminSocket
=tempSocket.getInputStream();
bytebyteBuffer[]=newbyte[1024];
intamount;
try{
while((amount=inSocket.read(byteBuffer))!=-1){
inFile.write(byteBuffer,0,amount);
}
inSocket.close();
out.println("226transfercomplete");
inFile.close();
tempSocket.close();
}
catch(IOExceptione){}
}

  文件传输命令包含从服务器中取得文件RETR和向服务器中发送文件STOR,这两个命令的处置十分相似。处置RETR命令时,起首失掉用户要取得的文件的称号,依据称号创立一个文件输出流,然后和客户端创建一时套接字毗连,并失掉一个输入流。随后,将文件输出流中的数据读出并借助于套接字输入流发送到客户端,传输终了今后,封闭流和一时套接字。

  STOR命令的处置也是一样的历程,只是偏向恰好相反。

  ◆DELE(DELETE)命令处置代码以下:

if(str.startsWith("DELE")){
str=str.substring(4);
str=str.trim();
Filefile=newFile(dir,str);
booleandel=file.delete();
out.println("250deletecommandsuccessful");
}

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

  ◆LIST命令处置代码以下:

if(str.startsWith("LIST")){
try{
out.println("150ASCIIdata");
SockettempSocket=newSocket(host,tempPort);
PrintWriterout2=newPrintWriter(tempSocket.getOutputStream(),true);
Filefile=newFile(dir);
String[]dirStructure=newString[10];
dirStructure=file.list();
StringstrType="";
for(inti=0;iif(dirStructure[i].indexOf(".")==-1){
strType="d";}
else
{strType="-";}
out2.println(strType+dirStructure[i]);
}
tempSocket.close();
out.println("226transfercomplete");
}
catch(IOExceptione){}

  LIST命令用于向客户端前往服务器中事情目次下的目次布局,包含文件和目次的列表。处置这个命令时,先创立一个一时的套接字向客户端发送目次信息。这个套接字的目标端标语缺省为1,然后为以后事情目次创立File对象,使用该对象的list()办法失掉一个包括该目次下一切文件和子目次称号的字符串数组,然后依据称号中是不是含有文件名中独有的“.”来区分目次和文件。最初,将失掉的称号数组经由过程一时套接字发送到客户端。

再说说缺点:首先java功能强大的背后是其复杂性,就拿web来说,当今流行的框架有很多,什么struts,spring,jQuery等等,而这无疑增加了java的复杂性。
沙发
发表于 2015-1-21 16:45:13 | 只看该作者
你现在最缺的是实际的工作经验,而不是书本上那些凭空想出来的程序。
蒙在股里 该用户已被删除
板凳
发表于 2015-1-27 22:43:26 | 只看该作者
是一种使网页(Web Page)由静态(Static)转变为动态(Dynamic)的语言
再现理想 该用户已被删除
地板
发表于 2015-1-30 09:27:28 | 只看该作者
设计模式是高级程序员真正掌握面向对象核心思想的必修课。设计模式并不是一种具体"技术",它讲述的是思想,它不仅仅展示了接口或抽象类在实际案例中的灵活应用和智慧
再见西城 该用户已被删除
5#
发表于 2015-2-6 09:32:19 | 只看该作者
[url]http://www.jdon.com/[/url]去下载,或到同济技术论坛的服务器[url]ftp://nro.shtdu.edu.cn[/url]去下,安装上有什么问题,可以到论坛上去提问。
因胸联盟 该用户已被删除
6#
发表于 2015-2-15 22:06:31 | 只看该作者
自从Sun推出Java以来,就力图使之无所不包,所以Java发展到现在,按应用来分主要分为三大块:J2SE,J2ME和J2EE,这也就是Sun ONE(Open Net Environment)体系。J2SE就是Java2的标准版,主要用于桌面应用软件的编程;J2ME主要应用于嵌入是系统开发,如手机和PDA的编程;J2EE是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统。
莫相离 该用户已被删除
7#
发表于 2015-2-15 22:54:31 | 只看该作者
是一种突破用户端机器环境和CPU
谁可相欹 该用户已被删除
8#
发表于 2015-3-4 16:32:24 | 只看该作者
在全球云计算和移动互联网的产业环境下,Java更具备了显著优势和广阔前景。
金色的骷髅 该用户已被删除
9#
发表于 2015-3-8 16:20:14 | 只看该作者
不过,每次的执行编译后的字节码需要消耗一定的时间,这同时也在一定程度上降低了 Java 程序的运行效率。
第二个灵魂 该用户已被删除
10#
发表于 2015-3-10 01:41:21 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
透明 该用户已被删除
11#
发表于 2015-3-15 04:54:18 | 只看该作者
是一种简化的C++语言 是一种安全的语言,具有阻绝计算机病毒传输的功能
活着的死人 该用户已被删除
12#
发表于 2015-3-20 10:36:01 | 只看该作者
你可以去承接一些项目做了,一开始可能有些困难,可是你有技术积累,又考虑周全,接下项目来可以迅速作完,相信大家以后都会来找你的,所以Money就哗啦啦的。。。。。。
分手快乐 该用户已被删除
13#
发表于 2015-3-27 08:08:08 | 只看该作者
Java是一个纯的面向对象的程序设计语言,它继承了 C++语言面向对象技术的核心。Java舍弃了C ++语言中容易引起错误的指针(以引用取代)、运算符重载(operator overloading)
简单生活 该用户已被删除
14#
发表于 2015-3-31 23:06:42 | 只看该作者
是一种将安全性(Security)列为第一优先考虑的语言
兰色精灵 该用户已被删除
15#
发表于 2015-4-6 03:08:30 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
只想知道 该用户已被删除
16#
发表于 2015-4-11 03:11:01 | 只看该作者
是一种为 Internet发展的计算机语言
灵魂腐蚀 该用户已被删除
17#
发表于 2015-4-12 23:28:19 | 只看该作者
是一种使网页(Web Page)产生生动活泼画面的语言
飘飘悠悠 该用户已被删除
18#
发表于 2015-4-24 00:09:13 | 只看该作者
有时间再研究一下MVC结构(把Model-View-Control分离开的设计思想)
小女巫 该用户已被删除
19#
发表于 2015-5-9 20:49:06 | 只看该作者
是一种语言,用以产生「小应用程序(Applet(s))
山那边是海 该用户已被删除
20#
发表于 2015-6-8 19:33:35 | 只看该作者
如果你学过HTML,那么事情要好办的多,如果没有,那你快去补一补HTML基础吧。其实JSP中的Java语法也不多,它更象一个脚本语言,有点象ASP。
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

QQ|Archiver|手机版|仓酷云 鄂ICP备14007578号-2

GMT+8, 2024-5-8 22:15

Powered by Discuz! X3.2

© 2001-2013 Comsenz Inc.

快速回复 返回顶部 返回列表