知识大全 使用Java实现FTP服务器
Posted 命令
篇首语:仓廪实则知礼节,衣食足则知荣辱。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 使用Java实现FTP服务器相关的知识,希望对你有一定的参考价值。
使用Java实现FTP服务器 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
FTP是Internet 上用来传送文件的协议 在Internet上通过FTP 服务器可以进行文件的上传(Upload)或下载(Download) FTP是实时联机服务 在使用它之前必须是具有该服务的一个用户(用户名和口令) 工作时客户端必须先登录到作为服务器一方的计算机上 用户登录后可以进行文件搜索和文件传送等有关操作 如改变当前工作目录 列文件目录 设置传输参数及传送文件等 使用FTP可以传送所有类型的文件 如文本文件 二进制可执行文件 图象文件 声音文件和数据压缩文件等 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()方法得到一个包含该目录下所有文件和子目录名称的字符串数组 然后根据名称中是否含有文件名中特有的 来区别目录和文件 最后 将得到的名称数组通过临时套接字发送到客户端 cha138/Article/program/Java/hx/201311/26847相关参考
SQL中两台服务器间使用连接服务器 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧! 执行另一服务器
区分Tomcat与Web服务器、应用服务器的关系 以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!
知识大全 列出小型电子商务网站服务器的简要硬件指标,3-5万远的服务器硬件配置
列出小型电子商务网站服务器的简要硬件指标,3-5万远的服务器硬件配置3-5万元的服务器硬件已经非常的不错了。。电子商务网站相对于新闻网站对服务器的要求性能高很多,因为大多都是asp,php,jsp+数
知识大全 用java写一个登陆程序,可以与服务器连接,登陆成功后跳转到服务器网站上
用java写一个登陆程序,可以与服务器连接,登陆成功后跳转到服务器网站上楼主,这样的需求,不管如何都要有一个API说明的吧,根据实际的情况写相应的网络程序ftp服务器无法登陆,同一个服务器上的网站可以
知识大全 WOW为什么我自己的服务器进不去 其他服务器可以进
WOW为什么我自己的服务器进不去其他服务器可以进 以下文字资料是由(本站网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!WOW
香港服务器租用一个月要多少钱?你可以用自己的服务器主机放到香港新世界机房,服务器托管香港四大机房最低价,如果再五台机器内用我们四分之一机柜就可以了,加百兆共享带宽每月一千多一点就可以了。香港服务器租用
文件服务器程序是专为提供网络服务的网络管理软件,它的作用是()
文件服务器程序是专为提供网络服务的网络管理软件,它的作用是()A、直接与网络服务器硬盘和网卡驱动程序连接。B、为本地的应用提供各类网络服务。C、对用户访问服务器的权限和数据加密进行管理。D、对多个用户
文件服务器程序是专为提供网络服务的网络管理软件,它的作用是()
文件服务器程序是专为提供网络服务的网络管理软件,它的作用是()A、直接与网络服务器硬盘和网卡驱动程序连接。B、为本地的应用提供各类网络服务。C、对用户访问服务器的权限和数据加密进行管理。D、对多个用户
一个网站的后台硬件设备除了服务器都需要哪些还有控制面板,比如cpanel,plesk等,不过选择一台稳定的服务器是非常重要的raks-mart网站的后台硬件设备除了服务器都需要哪些除了服务器,网络设备
知识大全 sql server 2000安装后,打开服务器,不出现服务器名称,自己输入后名称后,启动时显示拒绝访问
sqlserver2000安装后,打开服务器,不出现服务器名称,自己输入后名称后,启动时显示拒绝访问?1>网卡有问题请检查,以太网适配器是否安装正确2>协议有问题请检查,TCP/IP协议,