版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、Software Engineering,第14章 FTP服务器,FTP(File Transfer Protocol 文件传输协议)是Internet 上用来传送文件的协议。在Internet上通过FTP 服务器可以进行文件的上传(Upload)或下载(Download)。FTP是实时联机服务,在使用它之前必须是具有该服务的一个用户(用户名和口令),工作时客户端必须先登录到作为服务器一方的计算机上,用户登录后可以进行文件搜索和文件传送等有关操作,如改变当前工作目录、列文件目录、设置传输参数及传送文件等。使用FTP可以传送所有类型的文件,如文本文件、二进制可执行文件、图象文件、声音文件和数据压
2、缩文件等。,Network Programming,Software Engineering,14.1 FTP工作原理,FTP采用C/S(客户端/服务器)模式进行通信,但与其他的C/S模式网络通信协议又有一个很大的区别。通常在进行HTTP通信或是TELNET通信的时候,只需要一个端口进行通信。用户从头到尾都只需使用这个端口。但是FTP通信除了有一个默认端口21主要进行控制连接,进行命令协议和服务器端的响应码的传输;另外一个非标准端口主要进行数据传递,如文件的上载、下载等。至于非标准端口的产生则要根据用户选择的连接模式而定:如果客户选择的是主动模式(PORT),则需要用户端提供给服务器一个IP地
3、址和一个非标准端口;而如果用户采用被动模式(PASV),则服务器端需要提供给客户端一个IP地址和一个非标准端口。,Network Programming,Software Engineering,14.1 FTP工作原理,FTP (File Transfer Protoco l是文件传输协议的简称。用于工nternet上的控制文件的双向传输。同时,它也是一个应用程序。用户可以通过它把自己机器与世界各地所有运行FTP协议的服务器相连,访问服务器上的资源和信息 。 当启动FTP从远程计算机拷贝文件时,事实上启动了两个程序:一个本地机器上的FTP客户端程序,它向FTP服务器提出拷贝文件的请求。另一个
4、是启动在远程计算机的上的FTP服务器程序,它响应请求把你指定的文件传送到你的计算机中。FTP采用“客户端/服务器”方式,用户要在自己的本地计算机上安装FTP客户端程序。,Network Programming,Software Engineering,14.1 FTP工作原理,从根本上说,FTP协议就是在网络中各种不同的计算机之间按照TCP/工P协议来传输文件。FTP协议采用客户端/服务器(Client/Sever)模式,由FTP客户端程序和FTP服务器端程序组成。使用时,先启动FTP客户端程序与远程主机建立连接,然后向远程主机发出传输命令,远程主机在收到命令后就给予响应,并执行正确的命令。但
5、是FTP有一个根本的限制,那就是,如果用户在某个主机上没有注册获得授权,即没有用户名和口令,就不能与该主机进行文件传输。但匿名FTP服务器除外,它能够使用户与远程主机建立连接并以匿名身份从远程主机上拷贝文件,而不必是该远程主机的注册用户。用户使用特殊的用户名“Anonymous”或“guest”就可有限制地访问远程主机上公开的文件。现在许多系统要求用户将Email地址作为口令,以便更好地对访问者进行跟综。出于安全的目的,大部分匿名FTP主机一般只允许远程用户下载文件,而不允许上载文件。,Network Programming,Software Engineering,14.1 FTP工作原理,
6、FTP工作模式 上图中用户PI开始控制连接,控制连接与Telnet协议很象。在开始阶段,标准FTP命令由用户PI产生并通过控制连接传送到服务器进程。服务器PI向用户PI返回标准应答。FTP命令指定数据连接参数和文件系统操作。用户DTP在特定数据端口侦听,服务器开始数据连接并以指定的参数开始数据传输。数据端口不必在开始FTP命令的机器上,但用户或用户FTP进程必须确定它在指定的数据端口上侦听。这个数据连接是全双工的。,Network Programming,Software Engineering,14.1 FTP工作原理,FTP工作模式,Network Programming,Software
7、 Engineering,14.1 FTP工作原理,FTP传输模式 FTP协议的任务是从一台计算机将文件传送到另一台计算机,它与这两台计算机所处的位置、联接的方式、甚至是是否使用相同的操作系统无关。假设两台计算机通过ftp协议对话,并且能访问Internet,你可以用ftp命令来传输文件。每种操作系统使用上有某一些细微差别,但是每种协议基本的命令结构是相同的。 FTP的传输有两种方式:ASCII传输模式和二进制数据传输模式。,Network Programming,Software Engineering,14.2 ftpclient类,在J2SE中提供了与客户端编程有关的Api,它就是sun
8、. net. ftp. FtpClient类,FtpClient类封装了FTP协议的相关指令与实现细节,提供了一系列的方法,这些方法涵盖了几乎所有ftp的功能使用FtpClient类设计FTP客户端程序可以让编程人员轻松地实现登录远程FTP服务器、浏览服务器上的目录、设置传输协议、上传文件和下载文件等功能。 FtpClient类的构造方法和主要方法如下:,Network Programming,Software Engineering,14.2 ftpclient类,1. Public FtpClient(String hostname) 此构造函数利用给出的主机名建立一条FTP连接,使用默认
9、端口号 2. Public void openServer(String hostname) 这个方法用于建立一条与指定主机上的FTP服务器的连接,使用默认端口号。 3. Public void login(String username, String password) 此方法利用参数username和password登录到FTP服务器。使用过Intemet的用户应该知道,匿名FTP服务器的登录用户名为anonymous,密码一般用自己的电子邮件地址。 4. Public void binary():该命令可把传输格式设置为二进制格式。,Network Programming,Softwa
10、re Engineering,14.2 ftpclient类,在 JAVA 中利用ftpclient类 实现FTP服务器文件的上传,下载,删除功能。 程序代码见WORD附件,Network Programming,Software Engineering,14.3 FTP命令,大多数Internet服务一样,FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出FTP命令,服务器程序执行用户所发出的FTP命令,并将执行的结果返回到客户机。 FTP命令是Internet用户使用最频繁的命令之一,不论是在D
11、OS、Windows的命令行、LINUX、UN操作系统下都可以使用FTP,都会遇到大量的FTP内部命令,熟悉并灵活应用FTP命令,可以大大方便使用者,并收到事半功倍之效。 (注:只要安装了TCP/IP协议的机器就能使用ftp命令。 ftp命令对大小写是敏感的。),Network Programming,Software Engineering,14.3 FTP命令,命令格式:ftp -v-d-i-n-g-s:filename-w:windowsizecomputer -v 不显示远程服务器响应 -n 禁止第一次连接的时候自动登陆 -i 在多个文件传输期间关闭交互提示 -d 允许调试、显示客户机
12、和服务器之间传递的全部ftp命令 -g 不允许使用文件名通配符,文件名通配符的意思是说允许在本地文件以及路径名中使用通配字符 -s:filename 指定包含ftp命令的文本文件。在ftp命令启动后将自动运行这些命令。在加的参数里不能有空格。 -w:windowsize 忽略默认的4096传输缓冲区 computer 指定要连接的远程计算机的ip地址,Network Programming,Software Engineering,14.3 FTP命令,FTP 的主要操作都是基于各种命令基础之上的。常用的命令有: 设置传输模式,它包括ASC(文本) 和BINARY 二进制模式; 目录操作,改变
13、或显示远程计算机的当前目录(cd、dir/ls 命令); 连接操作,open命令用于建立同远程计算机的连接;close命令用于关闭连接; 发送操作,put命令用于传送文件到远程计算机;mput 命令用于传送多个文件到远程计算机; 获取操作,get命令用于接收一个文件;mget命令用于接收多个文件。,Network Programming,Software Engineering,14.3 FTP命令,基础命令 1、ASC(ASCll)、bin(BINARY)、IMAGE、TYPE ASC切换传输模式为文字模式(只能用来传送DOC文件); BINARY切换传输模式为二进制模式(除文字文件外皆用此
14、模式); IMAGE相当于BINARY TYPE让你更改或显示传输模式。,Network Programming,Software Engineering,14.3 FTP命令,2、CD、CDUP、LCD、PWD、 ! CD改变当前工作目录,例如:CDPUB; CDUP回到上一层目录,相当于你打CD: LCD让你更改或显示LOCAL端的工作目录,例如:LCDTMP; PWD显示工作目录(REMOTE端):,Network Programming,Software Engineering,14.3 FTP命令,3、 OPEN、 user name(user) 和 password (pass)
15、命令User 命令和 Password 命令分别用来提交客户端用户输入的用户名和口令。 OPEN :连接到指定ftp服务器上, 如open computer port 其中computer一般是远程计算机的ip地址,port不用说就是指定端口了 username: 张三 password: 123456,Network Programming,Software Engineering,14.3 FTP命令,4、GET、MGET、PUT、MPUT、RECV、SEND、 GET下传文件;说明:把远程的文件拷贝到本地计算机上。 如get remote-file local-file remote-f
16、ile是指定要复制的文件,local-file是指定本地计算机上的文件名, 没有指定的话则与remote-file同名。 MGET批量下传文件,说明:将多个远程文件复制到本地计算机. 例如:MGET*GZ; PUT上传文件;说明:将本地文件复制到远程计算机中,如put local-file remote-file 其中local-file是指定要复制的本地文件,remote-file是指定要复制的远程计算机上的文件名,不指定的话是和本地计算机上的文件名同名. MPUT批量上传文件,说明:将本地文件复制到远程计算机. 如mput local-files . RECV相当于GET(RECV为REC
17、EIVE的简写): SEND相当于PUT。,Network Programming,Software Engineering,14.3 FTP命令,5、LS、DIR、MLS、MDIR、MKDIR、RMDIR LS显示远程目录的文件和子目录. 如ls remote-directory local-file 其中remote-directory是指要查看的列表的目录,不指定的话显示的是当前工作目录。local-file是指定要保存列表的本地文件.不指定的话是在屏幕上输出. DIR:相当于LS 。,Network Programming,Software Engineering,14.3 FTP命令
18、,mls 列多个远程目录的内容 MDIR相当于MLS; MKDIR像DOS下的MD(创建子目录)一样: RMDIR像DOS下的RD(删除子目录)一样。,Network Programming,Software Engineering,14.3 FTP命令,举例说明ftp的命令行格式: (1)桌面-开始-运行 输入:ftp 成功显示:220 ProFTPD 12.4 Server(ProFTPD)ip地址 username: 张三 成功显示:331 Password required for 用户名 password: 123456 成功显示:230 User 用户名 logged in 进入f
19、tp运行环境 在ms-dos方式下的ftp,Network Programming,Software Engineering,14.3 FTP命令,(2)ftp使用的内部命令 cd:进入远程主机目录,改变到指定的目录 例如:ftpcd . 退向根目录(cd后有空格) ftpcd path 进目录(目录名为path) get:将远程主机的文件传至本地硬盘,“下传”一个文件。 例如:ftpget 1.htm d:ggg2.htm 下传文件一个文件。 说明:远程主机当前目录的1.htm文件,复制到本地d盘的ggg目录中,并且文件名改为2.htm,Network Programming,Softwar
20、e Engineering,14.4 服务器程序设计,1、 服务器主函数设计 编程思路 根据FTP 的工作原理,在主函数中建立一个服务器套接字端口,等待客户端请求,一旦客户端请求被接受,服务器程序就建立一个服务器分线程,处理客户端的命令。如果客户端需要和服务器端进行文件的传输,则建立一个新的套接字连接来完成文件的操作。,Network Programming,Software Engineering,14.4 服务器程序设计,public class ftpServer extends Thread private Socket socketClient; private int counte
21、r; private static String initDir; public static void main(String args) if(args.length != 0) initDir = args0; else initDir = c:; int i = 1;,Network Programming,Software Engineering,14.4 服务器程序设计,try System.out.println(“ftp server started!”); /监听21号端口 ServerSocket s = new ServerSocket(21); for(;) /接受客户
22、端请求 Socket incoming = s.accept(); /创建服务线程 new ftpServer(incoming,i).start(); i+; catch(Exception e) 线程类的主要设计都是在run()方法中实现。用run()方法得到客户端的套接字信息,根据套接字得到输入流和输出流,向客户端发送欢迎信息,Network Programming,Software Engineering,14.4 服务器程序设计,2、 FTP 命令的处理 (1) 访问控制命令 user name(user) 和 password (pass) 命令User 命令和 Password
23、命令分别用来提交客户端用户输入的用户名和口令。处理代码如下: 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.);,Network Programming,Software Engineering,14.4 服务器程序设计, CWD (CHANGE WORKING DIRECTORY) 命令该命令改变工作目录到用户指定的目录。处理
24、代码如下: if(str.startsWith(CWD) String str1 = str.substring(3); dir = dir+/+str1.trim(); out.println(250 CWD command succesful); ,Network Programming,Software Engineering,14.4 服务器程序设计, CDUP (CHANGE TO PARENT DIRECTORY)改变当前目录为上一层目录,命令处理代码如下: if(str.startsWith(CDUP) int n = dir.lastIndexOf(/); dir = dir.
25、substring(0,n); out.println(250 CWD command succesful); ,Network Programming,Software Engineering,14.4 服务器程序设计, QUIT:该命令退出及关闭与服务器的连接,输出GOOD BYE。命令处理代码如下: if(str.startsWith(QUIT) out.println(GOOD BYE); done = true; ,Network Programming,Software Engineering,14.4 服务器程序设计,(2) 传输参数命令 Port:使用该命令时,客户端必须发送客
26、户端用于接收数据的32位IP 地址和16位 的TCP 端口号。这些信息以8位为一组,使用十进制传输,中间用逗号隔开。命令处理代码如下: 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=;,Network Programming,Software Engineering,14.4 服务器
27、程序设计,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); ,Network Programming,Software Engineering,14.4 服务器程序设计, TYPE命令用来完成类型设置,处理代码如下: if(str.startsWith(TYPE)out.println(200 type set);,Netw
28、ork Programming,Software Engineering,14.4 服务器程序设计,(3) FTP 服务命令 RETR (RETEIEVE) 和 STORE (STORE)文件传输命令包括从服务器中获得文件RETR和向服务器中发送文件STOR,这两个命令的处理非常类似。处理RETR命令时,首先得到用户要获得的文件的名称,根据名称创建一个文件输入流,然后和客户端建立临时套接字连接,并得到一个输出流。随后,将文件输入流中的数据读出并借助于套接字输出流发送到客户端,传输完毕以后,关闭流和临时套接字。 STOR 命令的处理也是同样的过程,只是方向正好相反。,Network Progra
29、mming,Software Engineering,14.4 服务器程序设计,命令处理的代码 if(str.startsWith(RETR)out.println(150 Binary data connection);str = str.substring(4);str = str.trim();RandomAccessFile outFile = newRandomAccessFile(dir+/+str,r);Socket tempSocket = new Socket(host,tempPort);OutputStream outSocket = tempSocket.getOutp
30、utStream();byte byteBuffer= new byte1024;int amount;,Network Programming,Software Engineering,14.4 服务器程序设计,trywhile(amount = outFile.read(byteBuffer) != -1)outSocket.write(byteBuffer, 0, amount);outSocket.close();out.println(226 transfer complete);outFile.close();tempSocket.close();catch(IOException
31、 e),Network Programming,Software Engineering,14.4 服务器程序设计,if(str.startsWith(STOR)out.println(150 Binary data connection);str = str.substring(4);str = str.trim();RandomAccessFile inFile = newRandomAccessFile(dir+/+str,rw);Socket tempSocket = new Socket(host,tempPort);InputStream inSocket = tempSocket
32、.getInputStream();byte byteBuffer = new byte1024;int amount;,Network Programming,Software Engineering,14.4 服务器程序设计,trywhile(amount =inSocket.read(byteBuffer) )!= -1)inFile.write(byteBuffer, 0, amount);inSocket.close();out.println(226 transfer complete);inFile.close();tempSocket.close();catch(IOExcep
33、tion e),Network Programming,Software Engineering,14.4 服务器程序设计,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);,Network Programming,Software Engin
34、eering,14.4 服务器程序设计,LIST 命令用于向客户端返回服务器中工作目录下的目录结构,包括文件和目录的列表。处理这个命令时,先创建一个临时的套接字向客户端发送目录信息。这个套接字的目的端口号缺省为1,然后为当前工作目录创建File 对象,利用该对象的list()方法得到一个包含该目录下所有文件和子目录名称的字符串数组,然后根据名称中是否含有文件名中特有的“.”来区别目录和文件。最后,将得到的名称数组通过临时套接字发送到客户端。,Network Programming,Software Engineering,14.4 服务器程序设计,LIST命令处理代码如下: if(str.st
35、artsWith(LIST) tryout.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 String10;dirStructure= file.list();String strType=;,Network Programming,Software Engine
36、ering,14.4 服务器程序设计,for(int i=0;iif( dirStructurei.indexOf(.) = -1) strType = d ;elsestrType = - ;out2.println(strType+dirStructurei);tempSocket.close();out.println(226 transfer complete);catch(IOException e),Network Programming,Software Engineering,小结,文件传输协议(FTP:File Transfer Protocol)使得主机间可以共享文件。 F
37、TP 使用 TCP 生成一个虚拟连接用于控制信息,然后再生成一个单独的 TCP 连接用于数据传输。 FTP用于在因特网下载(Download)和上载(Upload)文件。 实现FTP文件传输必须有FTP服务器和FTP客户软件。 FTP服务一般运行在20和21两个端口。端口20用于在客户端和服务器之间传输数据流,而端口21用于传输控制流,并且是命令通向ftp服务器的进口。 FTP也是一个客户机/服务器系统。用户通过一个支持FTP协议的客户机程序,连接到在远程主机上的FTP服务器程序。用户通过客户机程序向服务器程序发出FTP命令,服务器程序执行用户所发出的FTP命令,并将执行的结果返回到客户机。,Network Programming,Software Engineering,小结,Network Programming,Software Engineering,思考与编程,1、一个FTP需建立哪两种连接? 2、 FTP的传输有哪两种方式? 3、在 JAVA 中利用ftpclient类 实现FTP服务器文件的上传,下载,删除功能。,Network Programming,Software Engineering,一、解析J2EE、J2SE、J2ME、JDK的区别,Java2平台包括:标准版(J2SE)、企业版(J2EE)和微缩版(J2ME)
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 宫腔镜下子宫内膜息肉摘除术后护理查房
- 肱骨内固定装置去除术后护理查房
- 根治性颈淋巴结清扫术后护理查房
- 风险评估与应对措施规划手册
- 餐饮服务业食品安全操作指导书
- 供应链环节责任管理品质保障承诺书范文3篇
- 行业文档归档与检索管理工具
- 辽宁省铁岭市达标名校2026届初三下学期月考二英语试题含解析
- 浙江省仙居县2025-2026学年初三零模语文试题含解析
- 浙江省金华九中重点达标名校2026届初三下学期第一次质量调查语文试题含解析
- 《医学影像检查技术学》课件-足X线摄影
- 黄金冶炼项目可行性研究报告
- 第15课《十月革命与苏联社会主义建设》中职高一下学期高教版(2023)世界历史全一册
- GB/T 11981-2024建筑用轻钢龙骨
- 2024年高等教育文学类自考-06216中外建筑史考试近5年真题集锦(频考类试题)带答案
- 《AutoCAD 2023基础与应用》 课件全套 劳动 项目1-8 AutoCAD 2023 入门、绘制简单平面图形-综合实训
- 缠论-简单就是美
- 教师读书分享《做温暖的教育者》
- QCT1177-2022汽车空调用冷凝器
- 2.1科学探究感应电流的方向课件-高二物理(2019选择性)
- 2024陆上风电场安全生产标准化实施规范
评论
0/150
提交评论