《Java网络编程技术.ppt》由会员分享,可在线阅读,更多相关《Java网络编程技术.ppt(32页珍藏版)》请在三一办公上搜索。
1、第6章 Java FTP 协议网络编程,2,FTP是TCP/IP协议组中的协议之一,是英文FileTransferProtocol的缩写。该协议是Internet文件传送的基础,它由一系列规格说明文档组成,目标是提高文件的共享性,提供非直接使用远程计算机,使存储介质对用户透明和可靠高效地传送数据。简单的说,FTP就是完成两台计算机之间的拷贝,从远程计算机拷贝文件至自己的计算机上,称之为“下载(download)”文件。若将文件从自己计算机中拷贝至远程计算机上,则称之为“上载(upload)”文件。在TCP/IP协议中,FTP标准命令TCP端口号为21,Port方式数据端口为20。,6.1 FT
2、P 协议,3,6.2FTP服务器和客户端,同大多数 Internet服务一样,FTP也是一个客户/服务器系统。用户通过一个客户机程序连接至在远程计算机上运行的服务器程序。依照FTP协议提供服务,进行文件传送的计算机就是FTP服务器,而连接FTP服务器,遵循FTP协议与服务器传送文件的电脑就是FTP客户端。用户要连上FTP服务器,就要用到FPT的客户端软件,通常Windows自带“ftp”命令,这是一个命令行的FTP客户程序,另外常用的FTP客户程序还有 CuteFTP、Ws_FTP、Flashfxp、LeapFTP、流星雨-猫眼等。,4,6.3 FTP 协议应用,通过FTP应用程序可以在Int
3、ernet上实现远程文件传输文件下载:从远程主机本地计算机文件上传:从本地计算机远程主机,5,6.4 FTP命令的使用,常用的FTP命令ftp rename 将远程主机上的文件改名ftp cd 改变工作目录ftp mkdir 在远程主机创建子目录ftp binary 指定以二进制方式传送ftp ascii 指定以ASCII方式传送ftp!在不断线的情况下,执行本地命令ftp pwd 查阅远程主机的当前目录ftp quit 结束联机,关闭所有已打开的连接ftp help 显示帮助信息,6,1、登录FTP服务器方法一:输入命令 ftp host其中host是FTP服务器的域名或IP地址。如:C:f
4、tp 启动FTP后,命令提示符变为ftp方法二:先输入命令 ftp 启动FTP,再用命令 open host 登录服务器。如:C:ftpC:open 登录时先是显示一些欢迎信息,然后会要求输入用户名和密码,比如匿名登录服务器:C:ftp User:anonymous331 User name okay,please send complete E-mail address as passwordPassword:230 User logged in,proceedftp注意:在输入密码时,屏幕没有任何显示,但已经输入了,不要认为出错。登录成功后就可以访问FTP服务器上的文件了。如果由于用户名或
5、密码错误导致登录失败,可以用user命令重新登录。,7,2、查看FTP服务器上的文件dir 命令:显示目录和文件列表。ls 命令:显示简易的文件列表。cd 命令:进入指定的目录。dir命令可以使用通配符“*”和“?”,比如,显示当前目录中所有扩展名为jpg的文件,可使用命令 dir*.jpg。cd命令中必须带目录名。比如 cd main 表示进入当前目录下的main子目录,cd.表示退回上一级子目录。,8,3、下载文件上传和下载文件时应该使用正确的传输类型,FTP的传输类型分为ASCII码方式和二进制方式两种,对.txt、.htm等文件应采用ASCII码方式传输,对.exe或图片、视频、音频等
6、文件应采用二进制方式传输。在默认情况下,FTP为ASCII码传输方式。type 命令:查看当前的传输方式。ascii 命令:设定传输方式为ASCII码方式。binary 命令:设定传输方式为二进制方式。以上命令都不带参数。get 命令:下载指定文件。get命令的格式:get filename newname,filename为下载的FTP服务器上的文件名,newname为保存在本地计算机上时使用的名字,如果不指定newname,文件将以原名保存。get命令下载的文件将保存在本地计算机的工作目录下。该目录是启动FTP时在盘符C:后显示的目录。如果想修改本地计算机的工作目录,可以使用 lcd 命令
7、。比如:lcd d:表示将工作目录设定为D盘的根目录。mget 命令:下载多个文件。mget命令的格式:mget filename filename。mget命令支持通配符“*”和“?”,比如:mget*.mp3 表示下载FTP服务器当前目录下的所有扩展名为mp3的文件。,9,4、上传文件put 命令:上传指定文件。put命令的格式:put filename newname,filename为上传的本地文件名,newname为上传至FTP服务器上时使用的名字,如果不指定newname,文件将以原名上传。上传文件前,应该根据文件的类型设置传输方式,本机的工作目录也应该设置为上传文件所在的目录。5
8、、结束并退出FTPclose 命令:结束与服务器的FTP会话。quit 命令:结束与服务器的FTP会话并退出FTP环境。,10,6、其它FTP命令pwd 命令:查看FTP服务器上的当前工作目录。rename filename newfilename 命令:重命名FTP服务器上的文件。delete filename 命令:删除FTP服务器上的文件。help cmd 命令:显示FTP命令的帮助信息,cmd是命令名,如果不带参数,则显示所有FTP命令。,11,6.5.FTP的传输模式,FTP 协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同
9、的操作系统无关。假设两台计算机通过 ftp协议对话,并且能访问Internet,你可以用ftp命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。,12,ASCII传输方式,假定用户正在拷贝的文件包含的简单ASCII码文本,如果在远程机器上运行的不是UNIX,当文件传输时ftp通常会自动地调整文件的内容以便于把文件解释成另外那台计算机存储文本文件的格式。但是常常有这样的情况,用户正在传输的文件包含的不是文本文件,它们可能是程序,数据库,字处理文件或者压缩文件(尽管字处理文件包含的大部分是文本,其
10、中也包含有指示页尺寸,字库等信息的非打印字符)。在拷贝任何非文本文件之前,用binary 命令告诉ftp逐字拷贝,不要对这些文件进行处理,这也是下面要讲的二进制传输。,13,二进制传输模式,在二进制传输中,保存文件的位序,以便原始和拷贝的是逐位一一对应的。即使目的地机器上包含位序列的文件是没意义的。例如,macintosh以二进制方式传送可执行文件到Windows系统,在对方系统上,此文件不能执行。如果你在ASCII方式下传输二进制文件,即使不需要也仍会转译。这会使传输稍微变慢,也会损坏数据,使文件变得不能用。(在大多数计算机上,ASCII 方式一般假设每一字符的第一有效位无意义,因为ASCI
11、I字符组合不使用它。如果你传输二进制文件,所有的位都是重要的。)如果你知道这两台机器是同样的,则二进制方式对文本文件和数据文件都是有效的。,14,6.6 Java FTP 协议网络编程,1.用Java 类库2.用第3方类库,15,Java FTP类库,类:FtpClient包:.*;,16,Java 第3方FTP类库,JScape,iNet Factory:/n software,IP*Works:ipworks.Ftp Enterprise Distributed Technologies,Java FTP Client Library:IBM alphaWorks,FTP Bean Sui
12、te:SourceForge,JFtp:The Jakarta Project,Jakarta Commons/Net:JavaShop JNetBeans:Florent Cueto,JavaFTP API:Bea Petrovicova,jFTP:The Globus Project,Java CoG Kit:,17,6.7 Java FTP API,18,类,|+-|+-|+-,19,FtpClient构造方法有:public FtpClient()public FtpClient(String host)throws IOExceptionpublic FtpClient(String
13、 host,int port)throws IOException,20,FtpClient主要方法public void login(String login,String password)throws IOExceptionpublic TelnetInputStream get(String filename)throws IOExceptionpublic TelnetOutputStream put(String filename)throws IOExceptionpublic TelnetInputStream list()throws IOExceptionpublic vo
14、id cd(String path)throws IOExceptionpublic void ascii()throws IOExceptionpublic void binary()throws IOExceptionpublic void closeServer()throws IOException,21,Java FTP 工作流程,22,Java API与 FTP命令对照:.ftpFTP指令loginUSER PASS getRETR putSTOR listLIST cdCWD asciiTYPE AbinaryTYPE IcloseServerQUIT,23,Java FTP 客
15、户端编程程序例,import java.io.*;import java.util.*;import.*;import;public class FtpUtil FtpClient ftpClient;public void connectServer(String server,String user,String password,String path)throws IOException ftpClient=new FtpClient();ftpClient.openServer(server);ftpClient.login(user,password);if(path.length
16、()!=0)ftpClient.cd(path);ftpClient.binary();,24,public long upload(String filename,String newname)throws Exception long result=0;/ftp输出流TelnetOutputStream os=null;FileInputStream is=null;try file_in=new java.io.File(filename);if(!file_in.exists()return-1;if(file_in.length()=0)return-2;os=ftpClient.p
17、ut(newname);result=file_in.length();is=new FileInputStream(file_in);byte bytes=new byte1024;int c;while(c=is.read(bytes)!=-1)os.write(bytes,0,c);finally if(is!=null)is.close();if(os!=null)os.close();return result;,25,public long upload(String filename)throws Exception String newname=;if(filename.ind
18、exOf(/)-1)newname=filename.substring(filename.lastIndexOf(/)+1);else newname=filename;return upload(filename,newname);public long download(String filename,String newfilename)throws Exception long result=0;TelnetInputStream is=null;FileOutputStream os=null;try is=ftpClient.get(filename);outfile=new j
19、ava.io.File(newfilename);os=new FileOutputStream(outfile);byte bytes=new byte1024;int c;,26,while(c=is.read(bytes)!=-1)os.write(bytes,0,c);result=result+c;catch(IOException e)e.printStackTrace();finally if(is!=null)is.close();if(os!=null)os.close();return result;public List getFileList(String path)L
20、ist list=new ArrayList();try DataInputStream dis=new DataInputStream(ftpClient.nameList(path);String filename=;while(filename=dis.readLine()!=null)list.add(filename);catch(Exception e)e.printStackTrace();return list;,27,public void closeServer()throws IOException try if(ftpClient!=null)ftpClient.clo
21、seServer();catch(IOException e)e.printStackTrace();public static void main(String args)throws Exception FtpUtil ftp=new FtpUtil();try ftp.connectServer(172.16.30.50,zlj,zlj,/ODBC);System.out.println(ok1);/ftp.createDir(ddd);System.out.println(ok2);System.out.println(filesize:+ftp.upload(D:/dd.txt)+字
22、节);List list=ftp.getFileList(.);for(int i=0;i list.size();i+)String filename=(String)list.get(i);System.out.println(filename);ftp.download(filename,E:/+filename);catch(Exception e)/finally ftp.closeServer();,28,public boolean createDir(String path)throws Exception ftpClient.sendServer(MKD+path+/r/n)
23、;ftpClient.binary();ftpClient.readServerResponse();return false;,29,6.8 Enterprise Distributed Technologies,Java FTP Client Library:,30,类主要方法,FTPClient()setRemoteHost(String ftp)connect()login(String u,String p)pwd()chdir(String p)dir()cdup(),31,get(String lf,String rf)chdir(String pn)put(String nn,String nn)mkdir(String nn)rename(String on,String nn)rmdir(String nn)uit(),32,程序例,见教材相关内容,