




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第14章FTP服务器FTP(FileTransferProtocol文件传输协议)是Internet上用来传送文件的协议。在Internet上通过FTP服务器可以进行文件的上传(Upload)或下载(Download)。FTP是实时联机服务,在使用它之前必须是具有该服务的一个用户(用户名和口令),工作时客户端必须先登录到作为服务器一方的计算机上,用户登录后可以进行文件搜索和文件传送等有关操作,如改变当前工作目录、列文件目录、设置传输参数及传送文件等。使用FTP可以传送所有类型的文件,如文本文件、二进制可执行文件、图象文件、声音文件和数据压缩文件等。NetworkProgrammingAnIntroductiontoDatabaseSystem第14章FTP服务器FTP(FileTransferP14.1FTP工作原理
FTP采用C/S(客户端/服务器)模式进行通信,但与其他的C/S模式网络通信协议又有一个很大的区别。通常在进行HTTP通信或是TELNET通信的时候,只需要一个端口进行通信。用户从头到尾都只需使用这个端口。但是FTP通信除了有一个默认端口21主要进行控制连接,进行命令协议和服务器端的响应码的传输;另外一个非标准端口主要进行数据传递,如文件的上载、下载等。至于非标准端口的产生则要根据用户选择的连接模式而定:如果客户选择的是主动模式(PORT),则需要用户端提供给服务器一个IP地址和一个非标准端口;而如果用户采用被动模式(PASV),则服务器端需要提供给客户端一个IP地址和一个非标准端口。NetworkProgrammingAnIntroductiontoDatabaseSystem14.1FTP工作原理FTP采用C/S(客户端/服务器14.1FTP工作原理
FTP(FileTransferProtocol是文件传输协议的简称。用于工nternet上的控制文件的双向传输。同时,它也是一个应用程序。用户可以通过它把自己机器与世界各地所有运行FTP协议的服务器相连,访问服务器上的资源和信息。当启动FTP从远程计算机拷贝文件时,事实上启动了两个程序:一个本地机器上的FTP客户端程序,它向FTP服务器提出拷贝文件的请求。另一个是启动在远程计算机的上的FTP服务器程序,它响应请求把你指定的文件传送到你的计算机中。FTP采用“客户端/服务器”方式,用户要在自己的本地计算机上安装FTP客户端程序。NetworkProgrammingAnIntroductiontoDatabaseSystem14.1FTP工作原理FTP(FileTrans14.1FTP工作原理
从根本上说,FTP协议就是在网络中各种不同的计算机之间按照TCP/工P协议来传输文件。FTP协议采用客户端/服务器(Client/Sever)模式,由FTP客户端程序和FTP服务器端程序组成。使用时,先启动FTP客户端程序与远程主机建立连接,然后向远程主机发出传输命令,远程主机在收到命令后就给予响应,并执行正确的命令。但是FTP有一个根本的限制,那就是,如果用户在某个主机上没有注册获得授权,即没有用户名和口令,就不能与该主机进行文件传输。但匿名FTP服务器除外,它能够使用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件,而不必是该远程主机的注册用户。用户使用特殊的用户名“Anonymous”或“guest”就可有限制地访问远程主机上公开的文件。现在许多系统要求用户将Email地址作为口令,以便更好地对访问者进行跟综。出于安全的目的,大部分匿名FTP主机一般只允许远程用户下载文件,而不允许上载文件。NetworkProgrammingAnIntroductiontoDatabaseSystem14.1FTP工作原理从根本上说,FTP协议就是在14.1FTP工作原理FTP工作模式上图中用户PI开始控制连接,控制连接与Telnet协议很象。在开始阶段,标准FTP命令由用户PI产生并通过控制连接传送到服务器进程。服务器PI向用户PI返回标准应答。FTP命令指定数据连接参数和文件系统操作。用户DTP在特定数据端口侦听,服务器开始数据连接并以指定的参数开始数据传输。数据端口不必在开始FTP命令的机器上,但用户或用户FTP进程必须确定它在指定的数据端口上侦听。这个数据连接是全双工的。NetworkProgrammingAnIntroductiontoDatabaseSystem14.1FTP工作原理FTP工作模式NetworkPr14.1FTP工作原理FTP工作模式NetworkProgrammingAnIntroductiontoDatabaseSystem14.1FTP工作原理FTP工作模式NetworkPr14.1FTP工作原理FTP传输模式FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过ftp协议对话,并且能访问Internet,你可以用ftp命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。NetworkProgrammingAnIntroductiontoDatabaseSystem14.1FTP工作原理FTP传输模式NetworkPr14.2ftpclient类
在J2SE中提供了与客户端编程有关的Api,它就是.ftp.FtpClient类,FtpClient类封装了FTP协议的相关指令与实现细节,提供了一系列的方法,这些方法涵盖了几乎所有ftp的功能使用FtpClient类设计FTP客户端程序可以让编程人员轻松地实现登录远程FTP服务器、浏览服务器上的目录、设置传输协议、上传文件和下载文件等功能。FtpClient类的构造方法和主要方法如下:NetworkProgrammingAnIntroductiontoDatabaseSystem14.2ftpclient类在J2SE中提供了与客户端编14.2ftpclient类1.PublicFtpClient(Stringhostname)此构造函数利用给出的主机名建立一条FTP连接,使用默认端口号2.PublicvoidopenServer(Stringhostname)这个方法用于建立一条与指定主机上的FTP服务器的连接,使用默认端口号。3.Publicvoidlogin(Stringusername,Stringpassword)此方法利用参数username和password登录到FTP服务器。使用过Intemet的用户应该知道,匿名FTP服务器的登录用户名为anonymous,密码一般用自己的电子邮件地址。4.Publicvoidbinary():该命令可把传输格式设置为二进制格式。NetworkProgrammingAnIntroductiontoDatabaseSystem14.2ftpclient类1.PublicFtpCl14.2ftpclient类在JAVA中利用ftpclient类实现FTP服务器文件的上传,下载,删除功能。程序代码见WORD附件NetworkProgrammingAnIntroductiontoDatabaseSystem14.2ftpclient类在JAVA中利用ftpcl14.3FTP命令大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出FTP命令,服务器程序执行用户所发出的FTP命令,并将执行的结果返回到客户机。FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS、Windows的命令行、LINUX、UNⅨ操作系统下都可以使用FTP,都会遇到大量的FTP内部命令,熟悉并灵活应用FTP命令,可以大大方便使用者,并收到事半功倍之效。(注:只要安装了TCP/IP协议的机器就能使用ftp命令。ftp命令对大小写是敏感的。)NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令大多数Internet服务一样,FTP14.3FTP命令
命令格式:ftp[-v][-d][-i][-n][-g][-s:filename][-w:windowsize][computer]-v不显示远程服务器响应-n禁止第一次连接的时候自动登陆-i在多个文件传输期间关闭交互提示-d允许调试、显示客户机和服务器之间传递的全部ftp命令-g不允许使用文件名通配符,文件名通配符的意思是说允许在本地文件以及路径名中使用通配字符-s:filename指定包含ftp命令的文本文件。在ftp命令启动后将自动运行这些命令。在加的参数里不能有空格。-w:windowsize忽略默认的4096传输缓冲区computer指定要连接的远程计算机的ip地址NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令命令格式:ftp[-v][-d][14.3FTP命令FTP的主要操作都是基于各种命令基础之上的。常用的命令有:◆设置传输模式,它包括ASCⅡ(文本)和BINARY二进制模式;◆目录操作,改变或显示远程计算机的当前目录(cd、dir/ls命令);◆连接操作,open命令用于建立同远程计算机的连接;close命令用于关闭连接;◆发送操作,put命令用于传送文件到远程计算机;mput命令用于传送多个文件到远程计算机;◆获取操作,get命令用于接收一个文件;mget命令用于接收多个文件。
NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令FTP的主要操作都是基于各种命令基14.3FTP命令基础命令
1、ASC(ASCll)、bin(BINARY)、IMAGE、TYPEASCⅡ切换传输模式为文字模式(只能用来传送DOC文件);BINARY切换传输模式为二进制模式(除文字文件外皆用此模式);IMAGE相当于BINARYTYPE让你更改或显示传输模式。NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令基础命令NetworkProgra14.3FTP命令2、CD、CDUP、LCD、P~WD、!CD改变当前工作目录,例如:CD\PUB;CDUP回到上一层目录,相当于你打CD..:LCD让你更改或显示LOCAL端的工作目录,例如:LCD\TMP;PWD显示工作目录(REMOTE端):NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令2、CD、CDUP、LCD、P~WD、14.3FTP命令3、OPEN、username(user)和password(pass)命令User命令和Password命令分别用来提交客户端用户输入的用户名和口令。OPEN:连接到指定ftp服务器上,如opencomputerport其中computer一般是远程计算机的ip地址,port不用说就是指定端口了username:张三password:123456NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令3、OPEN、username(14.3FTP命令4、GET、MGET、PUT、MPUT、RECV、SEND、GET下传文件;说明:把远程的文件拷贝到本地计算机上。如getremote-filelocal-fileremote-file是指定要复制的文件,local-file是指定本地计算机上的文件名,没有指定的话则与remote-file同名。MGET批量下传文件,说明:将多个远程文件复制到本地计算机.例如:MGET*.GZ;PUT上传文件;说明:将本地文件复制到远程计算机中,如putlocal-fileremote-file其中local-file是指定要复制的本地文件,remote-file是指定要复制的远程计算机上的文件名,不指定的话是和本地计算机上的文件名同名.MPUT批量上传文件,说明:将本地文件复制到远程计算机.如mputlocal-files...RECV相当于GET(RECV为RECEIVE的简写):SEND相当于PUT。NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令4、GET、MGET、PUT、MPUT14.3FTP命令5、LS、DIR、MLS、MDIR、MKDIR、RMDIRLS显示远程目录的文件和子目录.如lsremote-directorylocal-file其中remote-directory是指要查看的列表的目录,不指定的话显示的是当前工作目录。local-file是指定要保存列表的本地文件.不指定的话是在屏幕上输出.DIR:相当于LS。NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令5、LS、DIR、MLS、MDIR、M14.3FTP命令mls列多个远程目录的内容MDIR相当于MLS;MKDIR像DOS下的MD(创建子目录)一样:RMDIR像DOS下的RD(删除子目录)一样。NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令mls列多个远程目录的内容Netw14.3FTP命令举例说明ftp的命令行格式:(1)桌面--开始--运行输入:ftp成功显示:220ProFTPD12.4Server(ProFTPD)[ip地址]username:张三成功显示:331Passwordrequiredfor用户名password:123456成功显示:230User用户名loggedin进入ftp运行环境在ms-dos方式下的ftp>NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令举例说明ftp的命令行格式:Netwo14.3FTP命令(2)ftp使用的内部命令cd:进入远程主机目录,改变到指定的目录例如:ftp>cd..退向根目录(cd后有空格)ftp>cdpath进目录(目录名为path)get:将远程主机的文件传至本地硬盘,“下传”一个文件。例如:ftp>get1.htmd:\ggg\2.htm下传文件一个文件。说明:远程主机当前目录的1.htm文件,复制到本地d盘的ggg目录中,并且文件名改为2.htmNetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令(2)ftp使用的内部命令Networ14.4服务器程序设计1、服务器主函数设计编程思路根据FTP的工作原理,在主函数中建立一个服务器套接字端口,等待客户端请求,一旦客户端请求被接受,服务器程序就建立一个服务器分线程,处理客户端的命令。如果客户端需要和服务器端进行文件的传输,则建立一个新的套接字连接来完成文件的操作。NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计1、服务器主函数设计Netwo14.4服务器程序设计publicclassftpServerextendsThread{privateSocketsocketClient;privateintcounter;privatestaticStringinitDir;publicstaticvoidmain(String[]args){if(args.length!=0){initDir=args[0];}else{initDir="c:";}inti=1;NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计publicclassftpS14.4服务器程序设计try{System.out.println(“ftpserverstarted!”);//监听21号端口
ServerSockets=newServerSocket(21);for(;;){
//接受客户端请求
Socketincoming=s.accept();//创建服务线程
newftpServer(incoming,i).start();i++;}}catch(Exceptione){}}线程类的主要设计都是在run()方法中实现。用run()方法得到客户端的套接字信息,根据套接字得到输入流和输出流,向客户端发送欢迎信息NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计try{System.out.p14.4服务器程序设计2、FTP命令的处理(1)访问控制命令◆username(user)和password(pass)命令User命令和Password命令分别用来提交客户端用户输入的用户名和口令。处理代码如下:if(str.startsWith("USER")){user=str.substring(4);user=user.trim();out.println("331Password");}if(str.startsWith("PASS"))out.println("230User"+user+"loggedin.");NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计2、FTP命令的处理Netw14.4服务器程序设计◆CWD(CHANGEWORKINGDIRECTORY)命令该命令改变工作目录到用户指定的目录。处理代码如下:if(str.startsWith("CWD")){Stringstr1=str.substring(3);dir=dir+"/"+str1.trim();out.println("250CWDcommandsuccesful");}NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计◆CWD(CHANGEWOR14.4服务器程序设计◆CDUP(CHANGETOPARENTDIRECTORY)改变当前目录为上一层目录,命令处理代码如下:if(str.startsWith("CDUP")){intn=dir.lastIndexOf("/");dir=dir.substring(0,n);out.println("250CWDcommandsuccesful");}NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计◆CDUP(CHANGETO14.4服务器程序设计◆QUIT:该命令退出及关闭与服务器的连接,输出GOODBYE。命令处理代码如下:if(str.startsWith("QUIT")){out.println("GOODBYE");done=true;}NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计◆QUIT:该命令退出及关闭与服14.4服务器程序设计(2)传输参数命令◆Port:使用该命令时,客户端必须发送客户端用于接收数据的32位IP地址和16位的TCP端口号。这些信息以8位为一组,使用十进制传输,中间用逗号隔开。命令处理代码如下:if(str.startsWith("PORT")){out.println("200PORTcommandsuccessful");inti=str.length()-1;intj=str.lastIndexOf(",");intk=str.lastIndexOf(",",j-1);Stringstr1,str2;str1="";str2="";NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计(2)传输参数命令Networ14.4服务器程序设计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);}NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计for(intl=k+1;lst14.4服务器程序设计◆TYPE命令用来完成类型设置,处理代码如下:if(str.startsWith("TYPE")){
out.println("200typeset");
}NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计◆TYPE命令用来完成类型设置,14.4服务器程序设计(3)FTP服务命令◆RETR(RETEIEVE)和STORE(STORE)文件传输命令包括从服务器中获得文件RETR和向服务器中发送文件STOR,这两个命令的处理非常类似。处理RETR命令时,首先得到用户要获得的文件的名称,根据名称创建一个文件输入流,然后和客户端建立临时套接字连接,并得到一个输出流。随后,将文件输入流中的数据读出并借助于套接字输出流发送到客户端,传输完毕以后,关闭流和临时套接字。STOR命令的处理也是同样的过程,只是方向正好相反。NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计(3)FTP服务命令Netwo14.4服务器程序设计命令处理的代码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;
NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计命令处理的代码NetworkPr14.4服务器程序设计try{
while((amount=outFile.read(byteBuffer))!=-1){outSocket.write(byteBuffer,0,amount);
}
outSocket.close();
out.println("226transfercomplete");
outFile.close();
tempSocket.close();
}
catch(IOExceptione){}
}
NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计try{
while((amou14.4服务器程序设计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;
NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计if(str.startsWith14.4服务器程序设计try{
while((amount=inSocket.read(byteBuffer))!=-1){
inFile.write(byteBuffer,0,amount);
}
inSocket.close();
out.println("226transfercomplete");
inFile.close();
tempSocket.close();
}
catch(IOExceptione){}
NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计try{
while((amo14.4服务器程序设计◆DELE(DELETE)命令用于删除服务器上的指定文件,命令处理代码如下:if(str.startsWith("DELE")){
str=str.substring(4);
str=str.trim();
Filefile=newFile(dir,str);
booleandel=file.delete();
out.println("250deletecommandsuccessful");
}NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计◆DELE(DELETE)命令用14.4服务器程序设计◆LIST命令用于向客户端返回服务器中工作目录下的目录结构,包括文件和目录的列表。处理这个命令时,先创建一个临时的套接字向客户端发送目录信息。这个套接字的目的端口号缺省为1,然后为当前工作目录创建File对象,利用该对象的list()方法得到一个包含该目录下所有文件和子目录名称的字符串数组,然后根据名称中是否含有文件名中特有的“.”来区别目录和文件。最后,将得到的名称数组通过临时套接字发送到客户端。NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计◆LIST命令用于向客户端返回服14.4服务器程序设计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="";
NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计LIST命令处理代码如下:Netw14.4服务器程序设计for(inti=0;iif(dirStructure[i].indexOf(".")==-1){strType="d";}
else
{strType="-";}
out2.println(strType+dirStructure[i]);
}
tempSocket.close();
out.println("226transfercomplete");
}
catch(IOExceptione){}NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计for(inti=0;iif(小结文件传输协议(FTP:FileTransferProtocol)使得主机间可以共享文件。FTP使用TCP生成一个虚拟连接用于控制信息,然后再生成一个单独的TCP连接用于数据传输。
FTP用于在因特网下载(Download)和上载(Upload)文件。实现FTP文件传输必须有FTP服务器和FTP客户软件。FTP服务一般运行在20和21两个端口。端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出FTP命令,服务器程序执行用户所发出的FTP命令,并将执行的结果返回到客户机。NetworkProgrammingAnIntroductiontoDatabaseSystem小结文件传输协议(FTP:FileTransferPr小结NetworkProgrammingAnIntroductiontoDatabaseSystem小结NetworkProgrammingAnIntro思考与编程1、一个FTP需建立哪两种连接?2、FTP的传输有哪两种方式?3、在JAVA中利用ftpclient类实现FTP服务器文件的上传,下载,删除功能。NetworkProgrammingAnIntroductiontoDatabaseSystem思考与编程1、一个FTP需建立哪两种连接?NetworkP一、解析J2EE、J2SE、J2ME、JDK的区别Java2平台包括:标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)三个版本J2SE是Java2standardedition是Java2的标准版,主要用于桌面应用软件的编程J2EE即Java2enterpriseedition是Java2的企业版,主要用于分布式的网络程序的开发,如电子商务网站和ERP系统J2ME即Java2MicroEdition是Java的微型版,主要应用于嵌入式系统开发,如手机和PDA的编程。他们的范围是:J2SE包含于J2EE中,J2ME包含了J2SE的核心类,但新添加了一些专有类,对于初学者,都是从J2SE入手的。JDK是Javadevelopmenttoolkit,相当于是Java的库函数,是编译,运行java程序的工具包。NetworkProgrammingAnIntroductiontoDatabaseSystem一、解析J2EE、J2SE、J2ME、JDK的区别Java2NetworkProgramming版本发行日期JDK1.1.41997-09-12JDK1.1.51997-12-13JDK1.1.61998-04-24JDK1.1.71998-09-28JDK1.1.81999-04-08J2SE1.21998-12-04J2SE1.2.11999-03-30J2SE1.2.21999-07-08J2SE1.32000-05-08J2SE1.3.12001-05-17J2SE1.4.02002-02-13J2SE1.4.12002-09-16J2SE1.4.22003-06-26JavaSE5.0(1.5.0)2004-09-30JavaSE6.0(1.6.0)2006-04JavaSE7.0(1.7.0)2011-07-28JavaSE8.0(1.8.0)2013-09(预定)AnIntroductiontoDatabaseSystemNetworkProgramming版本发行日期JDK1二、基于TCP/IP协议栈的网络编程基于TCP/IP协议栈的网络编程是最基本的网络编程方式,主要是使用各种编程语言,利用操作系统提供的套接字网络编程接口,直接开发各种网络应用程序。本书主要讲解这种网络编程的相关技术。这种编程方式由于直接利用网络协议栈提供的服务来实现网络应用,所以层次比较低,编程者有较大的自由度,在利用套接字实现了网络进程通信以后,可以随心所欲地编写各种网络应用程序。这种编程首先要深入了解TCP/IP的相关知识,要深入掌握套接字网络编程接口,更重要的是要深入了解网络应用层协议,例如,要想编写出电子邮件程序,就必须深入了解SMTP和邮局协议第3版(PostOfficeProtocol3,POP3)。有时甚至需要自己开发合适的应用层协议。NetworkProgrammingAnIntroductiontoDatabaseSystem二、基于TCP/IP协议栈的网络编程NetworkProg三、基于WEB应用的网络编程Web又称为万维网或WWW,Web应用是Internet上最广泛的应用。它用HTML来表达信息,用超链接将全世界的网站连成一个整体,用浏览器这种统一的形式来浏览,为人们提供了一个图文并茂的多媒体信息世界。WWW已经深入应用到各行各业。无论是电子商务、电子政务、数字企业、数字校园,还是各种基于WWW的信息处理系统、信息发布系统和远程教育系统,都统统采用了网站的形式。这种巨大的需求催生了各种基于WWW应用的网络编程技术,首先出现了一大批所见即所得的网页制作工具,如Frontpage、Dreamweaver、Flash和Firework等,然后是一批动态服务器页面的制作技术,如ASP、JSP和PHP等。NetworkProgrammingAnIntroductiontoDatabaseSystem三、基于WEB应用的网络编程Web又称为万维网或WWW,网络程序设计第1章Java网络程序设计基础
第2章Internet寻址
第3章URL通信
第4章套接字
第5章数据报套接字
第6章多线程
第7章非阻塞Socket通信
第8章对象序列化
第9章套接字安全
第10章远程方法调用
第11章代理服务器
第13章电子邮件的发送和接收
第14章FTP服务器
AnIntroductiontoDatabaseSystem网络程序设计第1章Java网络程序设计基础
第2章Int第14章FTP服务器FTP(FileTransferProtocol文件传输协议)是Internet上用来传送文件的协议。在Internet上通过FTP服务器可以进行文件的上传(Upload)或下载(Download)。FTP是实时联机服务,在使用它之前必须是具有该服务的一个用户(用户名和口令),工作时客户端必须先登录到作为服务器一方的计算机上,用户登录后可以进行文件搜索和文件传送等有关操作,如改变当前工作目录、列文件目录、设置传输参数及传送文件等。使用FTP可以传送所有类型的文件,如文本文件、二进制可执行文件、图象文件、声音文件和数据压缩文件等。NetworkProgrammingAnIntroductiontoDatabaseSystem第14章FTP服务器FTP(FileTransferP14.1FTP工作原理
FTP采用C/S(客户端/服务器)模式进行通信,但与其他的C/S模式网络通信协议又有一个很大的区别。通常在进行HTTP通信或是TELNET通信的时候,只需要一个端口进行通信。用户从头到尾都只需使用这个端口。但是FTP通信除了有一个默认端口21主要进行控制连接,进行命令协议和服务器端的响应码的传输;另外一个非标准端口主要进行数据传递,如文件的上载、下载等。至于非标准端口的产生则要根据用户选择的连接模式而定:如果客户选择的是主动模式(PORT),则需要用户端提供给服务器一个IP地址和一个非标准端口;而如果用户采用被动模式(PASV),则服务器端需要提供给客户端一个IP地址和一个非标准端口。NetworkProgrammingAnIntroductiontoDatabaseSystem14.1FTP工作原理FTP采用C/S(客户端/服务器14.1FTP工作原理
FTP(FileTransferProtocol是文件传输协议的简称。用于工nternet上的控制文件的双向传输。同时,它也是一个应用程序。用户可以通过它把自己机器与世界各地所有运行FTP协议的服务器相连,访问服务器上的资源和信息。当启动FTP从远程计算机拷贝文件时,事实上启动了两个程序:一个本地机器上的FTP客户端程序,它向FTP服务器提出拷贝文件的请求。另一个是启动在远程计算机的上的FTP服务器程序,它响应请求把你指定的文件传送到你的计算机中。FTP采用“客户端/服务器”方式,用户要在自己的本地计算机上安装FTP客户端程序。NetworkProgrammingAnIntroductiontoDatabaseSystem14.1FTP工作原理FTP(FileTrans14.1FTP工作原理
从根本上说,FTP协议就是在网络中各种不同的计算机之间按照TCP/工P协议来传输文件。FTP协议采用客户端/服务器(Client/Sever)模式,由FTP客户端程序和FTP服务器端程序组成。使用时,先启动FTP客户端程序与远程主机建立连接,然后向远程主机发出传输命令,远程主机在收到命令后就给予响应,并执行正确的命令。但是FTP有一个根本的限制,那就是,如果用户在某个主机上没有注册获得授权,即没有用户名和口令,就不能与该主机进行文件传输。但匿名FTP服务器除外,它能够使用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件,而不必是该远程主机的注册用户。用户使用特殊的用户名“Anonymous”或“guest”就可有限制地访问远程主机上公开的文件。现在许多系统要求用户将Email地址作为口令,以便更好地对访问者进行跟综。出于安全的目的,大部分匿名FTP主机一般只允许远程用户下载文件,而不允许上载文件。NetworkProgrammingAnIntroductiontoDatabaseSystem14.1FTP工作原理从根本上说,FTP协议就是在14.1FTP工作原理FTP工作模式上图中用户PI开始控制连接,控制连接与Telnet协议很象。在开始阶段,标准FTP命令由用户PI产生并通过控制连接传送到服务器进程。服务器PI向用户PI返回标准应答。FTP命令指定数据连接参数和文件系统操作。用户DTP在特定数据端口侦听,服务器开始数据连接并以指定的参数开始数据传输。数据端口不必在开始FTP命令的机器上,但用户或用户FTP进程必须确定它在指定的数据端口上侦听。这个数据连接是全双工的。NetworkProgrammingAnIntroductiontoDatabaseSystem14.1FTP工作原理FTP工作模式NetworkPr14.1FTP工作原理FTP工作模式NetworkProgrammingAnIntroductiontoDatabaseSystem14.1FTP工作原理FTP工作模式NetworkPr14.1FTP工作原理FTP传输模式FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过ftp协议对话,并且能访问Internet,你可以用ftp命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。NetworkProgrammingAnIntroductiontoDatabaseSystem14.1FTP工作原理FTP传输模式NetworkPr14.2ftpclient类
在J2SE中提供了与客户端编程有关的Api,它就是.ftp.FtpClient类,FtpClient类封装了FTP协议的相关指令与实现细节,提供了一系列的方法,这些方法涵盖了几乎所有ftp的功能使用FtpClient类设计FTP客户端程序可以让编程人员轻松地实现登录远程FTP服务器、浏览服务器上的目录、设置传输协议、上传文件和下载文件等功能。FtpClient类的构造方法和主要方法如下:NetworkProgrammingAnIntroductiontoDatabaseSystem14.2ftpclient类在J2SE中提供了与客户端编14.2ftpclient类1.PublicFtpClient(Stringhostname)此构造函数利用给出的主机名建立一条FTP连接,使用默认端口号2.PublicvoidopenServer(Stringhostname)这个方法用于建立一条与指定主机上的FTP服务器的连接,使用默认端口号。3.Publicvoidlogin(Stringusername,Stringpassword)此方法利用参数username和password登录到FTP服务器。使用过Intemet的用户应该知道,匿名FTP服务器的登录用户名为anonymous,密码一般用自己的电子邮件地址。4.Publicvoidbinary():该命令可把传输格式设置为二进制格式。NetworkProgrammingAnIntroductiontoDatabaseSystem14.2ftpclient类1.PublicFtpCl14.2ftpclient类在JAVA中利用ftpclient类实现FTP服务器文件的上传,下载,删除功能。程序代码见WORD附件NetworkProgrammingAnIntroductiontoDatabaseSystem14.2ftpclient类在JAVA中利用ftpcl14.3FTP命令大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出FTP命令,服务器程序执行用户所发出的FTP命令,并将执行的结果返回到客户机。FTP命令是Internet用户使用最频繁的命令之一,不论是在DOS、Windows的命令行、LINUX、UNⅨ操作系统下都可以使用FTP,都会遇到大量的FTP内部命令,熟悉并灵活应用FTP命令,可以大大方便使用者,并收到事半功倍之效。(注:只要安装了TCP/IP协议的机器就能使用ftp命令。ftp命令对大小写是敏感的。)NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令大多数Internet服务一样,FTP14.3FTP命令
命令格式:ftp[-v][-d][-i][-n][-g][-s:filename][-w:windowsize][computer]-v不显示远程服务器响应-n禁止第一次连接的时候自动登陆-i在多个文件传输期间关闭交互提示-d允许调试、显示客户机和服务器之间传递的全部ftp命令-g不允许使用文件名通配符,文件名通配符的意思是说允许在本地文件以及路径名中使用通配字符-s:filename指定包含ftp命令的文本文件。在ftp命令启动后将自动运行这些命令。在加的参数里不能有空格。-w:windowsize忽略默认的4096传输缓冲区computer指定要连接的远程计算机的ip地址NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令命令格式:ftp[-v][-d][14.3FTP命令FTP的主要操作都是基于各种命令基础之上的。常用的命令有:◆设置传输模式,它包括ASCⅡ(文本)和BINARY二进制模式;◆目录操作,改变或显示远程计算机的当前目录(cd、dir/ls命令);◆连接操作,open命令用于建立同远程计算机的连接;close命令用于关闭连接;◆发送操作,put命令用于传送文件到远程计算机;mput命令用于传送多个文件到远程计算机;◆获取操作,get命令用于接收一个文件;mget命令用于接收多个文件。
NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令FTP的主要操作都是基于各种命令基14.3FTP命令基础命令
1、ASC(ASCll)、bin(BINARY)、IMAGE、TYPEASCⅡ切换传输模式为文字模式(只能用来传送DOC文件);BINARY切换传输模式为二进制模式(除文字文件外皆用此模式);IMAGE相当于BINARYTYPE让你更改或显示传输模式。NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令基础命令NetworkProgra14.3FTP命令2、CD、CDUP、LCD、P~WD、!CD改变当前工作目录,例如:CD\PUB;CDUP回到上一层目录,相当于你打CD..:LCD让你更改或显示LOCAL端的工作目录,例如:LCD\TMP;PWD显示工作目录(REMOTE端):NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令2、CD、CDUP、LCD、P~WD、14.3FTP命令3、OPEN、username(user)和password(pass)命令User命令和Password命令分别用来提交客户端用户输入的用户名和口令。OPEN:连接到指定ftp服务器上,如opencomputerport其中computer一般是远程计算机的ip地址,port不用说就是指定端口了username:张三password:123456NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令3、OPEN、username(14.3FTP命令4、GET、MGET、PUT、MPUT、RECV、SEND、GET下传文件;说明:把远程的文件拷贝到本地计算机上。如getremote-filelocal-fileremote-file是指定要复制的文件,local-file是指定本地计算机上的文件名,没有指定的话则与remote-file同名。MGET批量下传文件,说明:将多个远程文件复制到本地计算机.例如:MGET*.GZ;PUT上传文件;说明:将本地文件复制到远程计算机中,如putlocal-fileremote-file其中local-file是指定要复制的本地文件,remote-file是指定要复制的远程计算机上的文件名,不指定的话是和本地计算机上的文件名同名.MPUT批量上传文件,说明:将本地文件复制到远程计算机.如mputlocal-files...RECV相当于GET(RECV为RECEIVE的简写):SEND相当于PUT。NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令4、GET、MGET、PUT、MPUT14.3FTP命令5、LS、DIR、MLS、MDIR、MKDIR、RMDIRLS显示远程目录的文件和子目录.如lsremote-directorylocal-file其中remote-directory是指要查看的列表的目录,不指定的话显示的是当前工作目录。local-file是指定要保存列表的本地文件.不指定的话是在屏幕上输出.DIR:相当于LS。NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令5、LS、DIR、MLS、MDIR、M14.3FTP命令mls列多个远程目录的内容MDIR相当于MLS;MKDIR像DOS下的MD(创建子目录)一样:RMDIR像DOS下的RD(删除子目录)一样。NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令mls列多个远程目录的内容Netw14.3FTP命令举例说明ftp的命令行格式:(1)桌面--开始--运行输入:ftp成功显示:220ProFTPD12.4Server(ProFTPD)[ip地址]username:张三成功显示:331Passwordrequiredfor用户名password:123456成功显示:230User用户名loggedin进入ftp运行环境在ms-dos方式下的ftp>NetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令举例说明ftp的命令行格式:Netwo14.3FTP命令(2)ftp使用的内部命令cd:进入远程主机目录,改变到指定的目录例如:ftp>cd..退向根目录(cd后有空格)ftp>cdpath进目录(目录名为path)get:将远程主机的文件传至本地硬盘,“下传”一个文件。例如:ftp>get1.htmd:\ggg\2.htm下传文件一个文件。说明:远程主机当前目录的1.htm文件,复制到本地d盘的ggg目录中,并且文件名改为2.htmNetworkProgrammingAnIntroductiontoDatabaseSystem14.3FTP命令(2)ftp使用的内部命令Networ14.4服务器程序设计1、服务器主函数设计编程思路根据FTP的工作原理,在主函数中建立一个服务器套接字端口,等待客户端请求,一旦客户端请求被接受,服务器程序就建立一个服务器分线程,处理客户端的命令。如果客户端需要和服务器端进行文件的传输,则建立一个新的套接字连接来完成文件的操作。NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计1、服务器主函数设计Netwo14.4服务器程序设计publicclassftpServerextendsThread{privateSocketsocketClient;privateintcounter;privatestaticStringinitDir;publicstaticvoidmain(String[]args){if(args.length!=0){initDir=args[0];}else{initDir="c:";}inti=1;NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计publicclassftpS14.4服务器程序设计try{System.out.println(“ftpserverstarted!”);//监听21号端口
ServerSockets=newServerSocket(21);for(;;){
//接受客户端请求
Socketincoming=s.accept();//创建服务线程
newftpServer(incoming,i).start();i++;}}catch(Exceptione){}}线程类的主要设计都是在run()方法中实现。用run()方法得到客户端的套接字信息,根据套接字得到输入流和输出流,向客户端发送欢迎信息NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计try{System.out.p14.4服务器程序设计2、FTP命令的处理(1)访问控制命令◆username(user)和password(pass)命令User命令和Password命令分别用来提交客户端用户输入的用户名和口令。处理代码如下:if(str.startsWith("USER")){user=str.substring(4);user=user.trim();out.println("331Password");}if(str.startsWith("PASS"))out.println("230User"+user+"loggedin.");NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计2、FTP命令的处理Netw14.4服务器程序设计◆CWD(CHANGEWORKINGDIRECTORY)命令该命令改变工作目录到用户指定的目录。处理代码如下:if(str.startsWith("CWD")){Stringstr1=str.substring(3);dir=dir+"/"+str1.trim();out.println("250CWDcommandsuccesful");}NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计◆CWD(CHANGEWOR14.4服务器程序设计◆CDUP(CHANGETOPARENTDIRECTORY)改变当前目录为上一层目录,命令处理代码如下:if(str.startsWith("CDUP")){intn=dir.lastIndexOf("/");dir=dir.substring(0,n);out.println("250CWDcommandsuccesful");}NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计◆CDUP(CHANGETO14.4服务器程序设计◆QUIT:该命令退出及关闭与服务器的连接,输出GOODBYE。命令处理代码如下:if(str.startsWith("QUIT")){out.println("GOODBYE");done=true;}NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计◆QUIT:该命令退出及关闭与服14.4服务器程序设计(2)传输参数命令◆Port:使用该命令时,客户端必须发送客户端用于接收数据的32位IP地址和16位的TCP端口号。这些信息以8位为一组,使用十进制传输,中间用逗号隔开。命令处理代码如下:if(str.startsWith("PORT")){out.println("200PORTcommandsuccessful");inti=str.length()-1;intj=str.lastIndexOf(",");intk=str.lastIndexOf(",",j-1);Stringstr1,str2;str1="";str2="";NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计(2)传输参数命令Networ14.4服务器程序设计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);}NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计for(intl=k+1;lst14.4服务器程序设计◆TYPE命令用来完成类型设置,处理代码如下:if(str.startsWith("TYPE")){
out.println("200typeset");
}NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计◆TYPE命令用来完成类型设置,14.4服务器程序设计(3)FTP服务命令◆RETR(RETEIEVE)和STORE(STORE)文件传输命令包括从服务器中获得文件RETR和向服务器中发送文件STOR,这两个命令的处理非常类似。处理RETR命令时,首先得到用户要获得的文件的名称,根据名称创建一个文件输入流,然后和客户端建立临时套接字连接,并得到一个输出流。随后,将文件输入流中的数据读出并借助于套接字输出流发送到客户端,传输完毕以后,关闭流和临时套接字。STOR命令的处理也是同样的过程,只是方向正好相反。NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计(3)FTP服务命令Netwo14.4服务器程序设计命令处理的代码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;
NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计命令处理的代码NetworkPr14.4服务器程序设计try{
while((amount=outFile.read(byteBuffer))!=-1){outSocket.write(byteBuffer,0,amount);
}
outSocket.close();
out.println("226transfercomplete");
outFile.close();
tempSocket.close();
}
catch(IOExceptione){}
}
NetworkProgrammingAnIntroductiontoDatabaseSystem14.4服务器程序设计try{
while((amou14.4服务器程序设计if(str.startsWith("STOR")){
out.println("150Binarydataconnection");
str=
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
评论
0/150
提交评论