用Java实现FTP服务器解决方案

用Java实现FTP服务器解决方案,第1张

FTP 命令 FTP 的主要 *** 作都是基于各种命令基础之上的 常用的命令有 · 设置传输模式 它包括ASCⅡ(文本) 和BINARY 二进制模式;· 目录 *** 作 改变或显示远程计算机的当前目录(cd dir/ls 命令);· 连接 *** 作 open命令用于建立同远程计算机的连接 close命令用于关闭连接;· 发送 *** 作 put命令用于传送文件到远程计算机 mput 命令用于传送多个文件到远程计算机;· 获取 *** 作 get命令用于接收一个文件 mget命令用于接收多个文件 编程思路 根据FTP 的工作原理 在主函数中建立一个服务器套接字端口 等待客户端请求 一旦客户端请求被接受 服务器程序就建立一个服务器分线程 处理客户端的命令 如果客户端需要和服务器端进行文件的传输 则建立一个新的套接字连接来完成文件的 *** 作 编程技巧说明 主函数设计在主函数中 完成服务器端口的侦听和服务线程的创建 我们利用一个静态字符串变量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 != ) {initDir = args[ ];}else{ initDir = c: ;}int i = ;try{System out println( ftp server started! );//监听 号端口ServerSocket s = new ServerSocket( );for(;;){//接受客户端请求Socket ining = s accept();//创建服务线程new ftpServer(ining i) start();i++;}}catch(Exception e){}} 线程类的设计线程类的主要设计都是在run()方法中实现 用run()方法得到客户端的套接字信息 根据套接字得到输入流和输出流 向客户端发送欢迎信息 FTP 命令的处理( ) 访问控制命令· user name(user) 和 password (pass) 命令处理代码如下 if(str startsWith( USER )){user = str substring( );user = user trim();out println( Password );}if(str startsWith( PASS ))out println( User +user+ logged in );User 命令和 Password 命令分别用来提交客户端用户输入的用户名和口令 · CWD (CHANGE WORKING DIRECTORY) 命令处理代码如下 if(str startsWith( CWD )){String str = str substring( );dir = dir+ / +str trim();out println( CWD mand succesful );}该命令改变工作目录到用户指定的目录 · CDUP (CHANGE TO PARENT DIRECTORY) 命令处理代码如下 if(str startsWith( CDUP )){int n = dir lastIndexOf( / );dir = dir substring( n);out println( CWD mand succesful );}该命令改变当前目录为上一层目录 · QUIT命令处理代码如下 if(str startsWith( QUIT )) {out println( GOOD BYE );done = true;}该命令退出及关闭与服务器的连接 输出GOOD BYE ( ) 传输参数命令· Port命令处理代码如下 if(str startsWith( PORT )) {out println( PORT mand successful );int i = str length() ;int j = str lastIndexOf( );int k = str lastIndexOf( j );String str str ;str = ;str = ;for(int l=k+ ;lstr = str + str charAt(l);}for(int l=j+ ;l<=i;l++){str = str + str charAt(l);}tempPort = Integer parseInt(str ) +Integer parseInt(str );}使用该命令时 客户端必须发送客户端用于接收数据的 位IP 地址和 位 的TCP 端口号 这些信息以 位为一组 使用十进制传输 中间用逗号隔开 · TYPE命令处理代码如下 if(str startsWith( TYPE )){out println( type set );}TYPE 命令用来完成类型设置 ( ) FTP 服务命令· RETR (RETEIEVE) 和 STORE (STORE)命令处理的代码if(str startsWith( RETR )){out println( Binary data connection );str = str substring( );str = str trim();RandomAccessFile outFile = newRandomAccessFile(dir+ / +str r );Socket tempSocket = new Socket(host tempPort);OutputStream outSocket = tempSocket getOutputStream();byte byteBuffer[]= new byte[ ];int amount;try{while((amount = outFile read(byteBuffer)) != ){outSocket write(byteBuffer amount);}outSocket close();out println( transfer plete );outFile close();tempSocket close();}catch(IOException e){}}if(str startsWith( STOR )){out println( Binary data connection );str = str substring( );str = str trim();RandomAccessFile inFile = newRandomAccessFile(dir+ / +str rw );Socket tempSocket = new Socket(host tempPort);InputStream inSocket = tempSocket getInputStream();byte byteBuffer[] = new byte[ ];int amount;try{while((amount =inSocket read(byteBuffer) )!= ){inFile write(byteBuffer amount);}inSocket close();out println( transfer plete );inFile close();tempSocket close();}catch(IOException e){}}文件传输命令包括从服务器中获得文件RETR和向服务器中发送文件STOR 这两个命令的处理非常类似 处理RETR命令时 首先得到用户要获得的文件的名称 根据名称创建一个文件输入流 然后和客户端建立临时套接字连接 并得到一个输出流 随后 将文件输入流中的数据读出并借助于套接字输出流发送到客户端 传输完毕以后 关闭流和临时套接字 STOR 命令的处理也是同样的过程 只是方向正好相反 · DELE (DELETE)命令处理代码如下 if(str startsWith( DELE )){str = str substring( );str = str trim();File file = new File(dir str);boolean del = file delete();out println( delete mand successful );}DELE 命令用于删除服务器上的指定文件 · LIST命令处理代码如下 if(str startsWith( LIST )) {try{out println( ASCII data );Socket tempSocket = new Socket(host tempPort);PrintWriter out = new PrintWriter(tempSocket getOutputStream() true);File file = new File(dir);String[] dirStructure = new String[ ];dirStructure= file list();String strType= ;for(int i= ;iif( dirStructure[i] indexOf( ) == ) { strType = d ;}else{strType = ;}out println(strType+dirStructure[i]);}tempSocket close();out println( transfer plete );}catch(IOException e){}LIST 命令用于向客户端返回服务器中工作目录下的目录结构 包括文件和目录的列表 处理这个命令时 先创建一个临时的套接字向客户端发送目录信息 这个套接字的目的端口号缺省为 然后为当前工作目录创建File 对象 利用该对象的list()方法得到一个包含该目录下所有文件和子目录名称的字符串数组 然后根据名称中是否含有文件名中特有的 来区别目录和文件 最后 将得到的名称数组通过临时套接字发送到客户端 lishixinzhi/Article/program/Java/JSP/201311/19211

web应用的运营都是基于web服务器的存在才能实现的。
今天我们就一起来了解一下,目前比较常见的一些web服务器都有哪些类型。
1、Tomcat服务器目前非常流行的Tomcat服务器是Apache-Jarkarta开源项目中的一个子项目,是一个小型、轻量级的支持JSP和Servlet技术的Web服务器,也是初学者学习开发JSP应用的选。
2、Resin服务器Resin是Caucho公司的产品,是一个非常流行的支持Servlet和JSP的服务器,速度非常快。
Resin本身包含了一个支持HTML的Web服务器,这使它不仅可以显示动态内容,而且显示静态内容的能力也毫不逊色,因此许多网站都是使用Resin服务器构建3、JBoss服务器JBoss是一个种遵从JavaEE规范的、开放源代码的、纯Java的EJB服务器,对于J2EE有很好的支持。
JBoss采用JMLAPI实现软件模块的集成与管理,其核心服务又是提供EJB服务器,不包含Servlet和JSP的Web容器,不过它可以和Tomcat完美结合4、WebSphere服务器WebSphere是IBM公司的产品,可进一步细分为WebSpherePerformancePack、CacheManager和WebSphereApplicationServer等系列,其中WebSphereApplicationServer是基于Java的应用环境,可以运行于SunSolaris、WindowsNT等多种 *** 作系统平台,用于建立、部署和管理Internet和IntranetWeb应用程序。
5、WebLogic服务器WebLogic是BEA公司的产品(现在已经被Oracle收购),可进一步细分为WebLogicServer、WebLogicEnterprise和WebLogicPortal等系列,其中WebLogicServer的功能特别强大。
WebLogic支持企业级的、多层次的和完全分布式的Web应用,并且服务器的配置简单、界面友好。
IT培训>

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zz/12697257.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-27
下一篇 2023-05-27

发表评论

登录后才能评论

评论列表(0条)

保存