当前位置:八五教程网教学知识电脑学习网络技术用Java实现FTP服务器解决方案» 正文
  1. 用Java实现FTP服务器解决方案

  2. [08-24 16:58:10]   来源:http://www.85jc.com  网络技术   阅读:8397

概要:} 使用该命令时,客户端必须发送客户端用于接收数据的32位IP 地址和16位 的TCP 端口号。这些信息以8位为一组,使用十进制传输,中间用逗号隔开。 · TYPE命令处理代码如下: if(str.startsWith("TYPE")){ out.println("200 type set"); } TYPE 命令用来完成类型设置。 (3) FTP 服务命令 · RETR (RETEIEVE) 和 STORE (STORE)命令处理的代码 if(str.startsWith("RETR")){ out.println("150 Binary data connection"); str = str.substring(4); str = str.trim(); RandomAccessFile outFile = new RandomAccessFile(dir+"/"+str,"r"); Socket te

用Java实现FTP服务器解决方案,标签:网络知识,网络学习,http://www.85jc.com
}
  使用该命令时,客户端必须发送客户端用于接收数据的32位IP 地址和16位 的TCP 端口号。这些信息以8位为一组,使用十进制传输,中间用逗号隔开。

  · TYPE命令处理代码如下:

if(str.startsWith("TYPE")){
 out.println("200 type set");
}
  TYPE 命令用来完成类型设置。

  (3) FTP 服务命令

  · RETR (RETEIEVE) 和 STORE (STORE)命令处理的代码

if(str.startsWith("RETR")){
 out.println("150 Binary data connection");
 str = str.substring(4);
 str = str.trim();
 RandomAccessFile outFile = new
 RandomAccessFile(dir+"/"+str,"r");
 Socket tempSocket = new Socket(host,tempPort);
 OutputStream outSocket = tempSocket.getOutputStream();
 byte byteBuffer[]= new byte[1024];
 int amount;
 try{
  while((amount = outFile.read(byteBuffer)) != -1){
   outSocket.write(byteBuffer, 0, amount);
  }
  outSocket.close();
  out.println("226 transfer complete");
  outFile.close();
  tempSocket.close();
 }
 catch(IOException e){}
}
if(str.startsWith("STOR")){
 out.println("150 Binary data connection");
 str = str.substring(4);
 str = str.trim();
 RandomAccessFile inFile = new
 RandomAccessFile(dir+"/"+str,"rw");
 Socket tempSocket = new Socket(host,tempPort);
 InputStream inSocket = tempSocket.getInputStream();
 byte byteBuffer[] = new byte[1024];
 int amount;
 try{
  while((amount =inSocket.read(byteBuffer) )!= -1){
  inFile.write(byteBuffer, 0, amount);
 }
 inSocket.close();
 out.println("226 transfer complete");
 inFile.close();
 tempSocket.close();
}
catch(IOException e){}
}
  文件传输命令包括从服务器中获得文件RETR和向服务器中发送文件STOR,这两个命令的处理非常类似。处理RETR命令时,首先得到用户要获得的文件的名称,根据名称创建一个文件输入流,然后和客户端建立临时套接字连接,并得到一个输出流。随后,将文件输入流中的数据读出并借助于套接字输出流发送到客户端,传输完毕以后,关闭流和临时套接字。

  STOR 命令的处理也是同样的过程,只是方向正好相反。

  · 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");
}
  DELE 命令用于删除服务器上的指定文件。

  · LIST命令处理代码如下:

if(str.startsWith("LIST")) {
 try{
  out.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 String[10];
  dirStructure= file.list();
  String strType="";
  for(int i=0;iif( dirStructure[i].indexOf(".") == -1) { strType = "d ";}
   else
   {strType = "- ";}
   out2.println(strType+dirStructure[i]);
  }
  tempSocket.close();
  out.println("226 transfer complete");
 }
catch(IOException e){}
  LIST 命令用于向客户端返回服务器中工作目录下的目录结构,包括文件和目录的列表。处理这个命令时,先创建一个临时的套接字向客户端发送目录信息。这个套接字的目的端口号缺省为1,然后为当前工作目录创建File 对象,利用该对象的list()方法得到一个包含该目录下所有文件和子目录名称的字符串数组,然后根据名称中是否含有文件名中特有的“.”来区别目录和文件。最后,将得到的名称数组通过临时套接字发送到客户端。

上一页  [1] [2] 


Tag:网络技术网络知识,网络学习电脑学习 - 网络技术

上一篇:修改XP远程3389端口让网络连接更安全
《用Java实现FTP服务器解决方案》相关文章
留言板
取消 发布留言