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

黄乐升

黄乐升

2016-01-29 12:50

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

  FTP 的主要操作都是基于各种命令基础之上的。常用的命令有:

  · 设置传输模式,它包括ASCⅡ(文本) 和BINARY 二进制模式;

  · 目录操作,改变或显示远程计算机的当前目录(cd、dir/ls 命令);

  · 连接操作,open命令用于建立同远程计算机的连接;close命令用于关闭连接;

  · 发送操作,put命令用于传送文件到远程计算机;mput 命令用于传送多个文件到远程计算机;

  · 获取操作,get命令用于接收一个文件;mget命令用于接收多个文件。

  编程思路

  根据FTP 的工作原理,在主函数中建立一个服务器套接字端口,等待客户端请求,一旦客户端请求被接受,服务器程序就建立一个服务器分线程,处理客户端的命令。如果客户端需要和服务器端进行文件的传输,则建立一个新的套接字连接来完成文件的操作。

  编程技巧说明

  1.主函数设计

  在主函数中,完成服务器端口的侦听和服务线程的创建。我们利用一个静态字符串变量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 != 0) {
   initDir = args[0];
  }else{ initDir = "c:";}
  int i = 1;
  try{
   System.out.println("ftp server started!");
   //监听21号端口
   ServerSocket s = new ServerSocket(21);
   for(;;){
    //接受客户端请求
    Socket incoming = s.accept();
    //创建服务线程
    new ftpServer(incoming,i).start();
    i++;
   }
  }catch(Exception e){}
  }

  2. 线程类的设计

  线程类的主要设计都是在run()方法中实现。用run()方法得到客户端的套接字信息,根据套接字得到输入流和输出流,向客户端发送欢迎信息。

  3. FTP 命令的处理

  (1) 访问控制命令

  · user name(user) 和 password (pass) 命令处理代码如下:

  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.");

  User 命令和 Password 命令分别用来提交客户端用户输入的用户名和口令。

  · CWD (CHANGE WORKING DIRECTORY) 命令处理代码如下:

  if(str.startsWith("CWD")){
  String str1 = str.substring(3);
  dir = dir+"/"+str1.trim();
  out.println("250 CWD command succesful");
  }

  该命令改变工作目录到用户指定的目录。

  · CDUP (CHANGE TO PARENT DIRECTORY) 命令处理代码如下:

  if(str.startsWith("CDUP")){
  int n = dir.lastIndexOf("/");
  dir = dir.substring(0,n);
  out.println("250 CWD command succesful");
  }

  该命令改变当前目录为上一层目录。

  · QUIT命令处理代码如下:

  if(str.startsWith("QUIT")) {
  out.println("GOOD BYE");
  done = true;
  }

  该命令退出及关闭与服务器的连接,输出GOOD BYE。

  (2) 传输参数命令

  · Port命令处理代码如下:

  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="";
  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);
  }

  使用该命令时,客户端必须发送客户端用于接收数据的32位IP 地址和16位 的TCP 端口号。这些信息以8位为一组,使用十进制传输,中间用逗号隔开。

  · TYPE命令处理代码如下:

  if(str.startsWith("TYPE")){
  out.println("200 type set");
  }

  TYPE 命令用来完成类型设置。
展开更多 50%)
分享

猜你喜欢

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

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

用Java实现SMTP服务器

编程语言 网络编程
用Java实现SMTP服务器

s8lol主宰符文怎么配

英雄联盟 网络游戏
s8lol主宰符文怎么配

惠普服务器单键灾难恢复解决方案

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
惠普服务器单键灾难恢复解决方案

用VSFTPD搭建FTP服务器

Linux Linux命令 Linux安装 Linux编程 Linux桌面 Linux软件 Linux内核 Linux管理
用VSFTPD搭建FTP服务器

lol偷钱流符文搭配推荐

英雄联盟 网络游戏
lol偷钱流符文搭配推荐

用Java实现多线程服务器程序

编程语言 网络编程
用Java实现多线程服务器程序

sqlserver 2000 远程连接 服务器的解决方案

编程语言 网络编程
sqlserver 2000 远程连接 服务器的解决方案

lolAD刺客新符文搭配推荐

英雄联盟
lolAD刺客新符文搭配推荐

《全民小镇》布局攻略

《全民小镇》布局攻略

Flash MX 2004视频教程超速入门系列(4)

Flash MX 2004视频教程超速入门系列(4)
下拉加载更多内容 ↓