设为首页 收藏本站
查看: 1263|回复: 0

[经验分享] FTP 协议(rfc939) 简单的实验(in Java)

[复制链接]

尚未签到

发表于 2016-6-10 12:30:28 | 显示全部楼层 |阅读模式
  Java代码:
FTPClient.java
package org;
  import java.io.BufferedInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.Reader;
import java.io.Writer;
import java.net.Socket;
import java.util.ArrayList;
import java.util.List;
import java.util.StringTokenizer;
  public class FtpClient ...{
  public static final int DEFAULT_PORT = 1968;
  private static int print(Reader in) throws IOException ...{
        int c;
        int prev = 0, current = 0;
        int result = 0;
        int count = 0, k1 = 0, k2 = 0, k3 = 0;
        while (prev != ' ' && current != ' ') ...{
            prev = current;
            c = in.read();
            current = c;
            if (count < 3) ...{
                switch (count) ...{
                case 0:
                    k1 = current - '0';
                    break;
                case 1:
                    k2 = current - '0';
                    break;
                case 2:
                    k3 = current - '0';
                    break;
                }
            }
            count++;
            System.out.write(current);
        }
        result = k1 * 100 + k2 * 10 + k3;
        return result;
    }
  private static void printData(Reader in) throws IOException ...{
        int c = 0;
  while ((c = in.read()) != -1) ...{
            System.out.print((char) c);
        }
        System.out.println();
    }
  private static void inputCommand(Writer out, String command) throws IOException ...{
        out.write(command);
        out.write(" \r\n");
        out.flush();
    }
  public static void main(String[] args) ...{
        String hostname = "192.168.1.101";
  Socket commandConn = null;
  Socket dataConn = null;
  try ...{
  commandConn = new Socket(hostname, DEFAULT_PORT);
  Writer out = new OutputStreamWriter(commandConn.getOutputStream(),
                    "8859_1");
  InputStream raw = commandConn.getInputStream();
            BufferedInputStream buffer = new BufferedInputStream(raw);
            InputStreamReader commandIn = new InputStreamReader(buffer,
                    "8859_1");
  System.out.println("login in");
            int i = print(commandIn);// 220
  inputCommand(out, "USER winters");
            System.out.println("USER winters");
            i = print(commandIn);// 331
  inputCommand(out, "PASS 123456");
            System.out.println("PASS 123456");
            i = print(commandIn);// 230
  inputCommand(out, "SYST");
            System.out.println("SYST");
            i = print(commandIn);// 215
  inputCommand(out, "PWD");
            System.out.println("PWD");
            i = print(commandIn);// 257
  inputCommand(out, "TYPE A");
            System.out.println("TYPE A");
            i = print(commandIn);// 200
  inputCommand(out, "PASV");
            System.out.println("PASV");
           
            int port = getPortNumber(commandIn);
            dataConn = new Socket(hostname, port);
            BufferedInputStream dataBuffer = new BufferedInputStream(dataConn
                    .getInputStream());
            InputStreamReader dataIn = new InputStreamReader(dataBuffer,
                    "8859_1");
  System.out.println("Connected " + hostname + " on " + port);
  /** *//**
             * LIST
             */
  inputCommand(out, "LIST");
            System.out.println("LIST");
            System.out.print("commandIn : ");
            i = print(commandIn);// 150
  System.out.print("dataIn : ");
            printData(dataIn);// abc
  i = print(commandIn);// 226
  /** *//** ************************************* */
  inputCommand(out, "PASV");
            System.out.println("PASV");
            port = getPortNumber(commandIn);
  dataConn = new Socket(hostname, port);
            dataBuffer = new BufferedInputStream(dataConn.getInputStream());
            dataIn = new InputStreamReader(dataBuffer, "8859_1");
  System.out.println("Connected " + hostname + " on " + port);
  /** *//**
             * RETR
             */
  inputCommand(out, "RETR 1.txt");
            System.out.println("RETR 1.txt");
  System.out.print("commandIn : ");
            i = print(commandIn);// 150
  System.out.print("dataIn : ");
            printData(dataIn);// abc
  i = print(commandIn);// 226
  } catch (IOException e) ...{
            System.err.println(e);
        } finally ...{
            try ...{
                if (commandConn != null)
                    commandConn.close();
                if (dataConn != null)
                    dataConn.close();
            } catch (IOException e) ...{
                System.err.println(e);
            }
        }
  }
  private static int getPortNumber(InputStreamReader in) throws IOException ...{
        int c;
        int prev = 0, current = 0;
        boolean start = false;
        ByteArrayOutputStream out = new ByteArrayOutputStream();
        while (prev != ' ' && current != ' ') ...{
            prev = current;
            c = in.read();
            current = c;
  if (prev == '(')
                start = true;
            if (current == ')')
                start = false;
            if (start)
                out.write(current);
            // System.out.println("==" + out.toString() + "==");
            System.out.write(current);
        }
  String ipWithPort = out.toString();
        StringTokenizer stk = new StringTokenizer(ipWithPort, ",");
        List list = new ArrayList();
        while (stk.hasMoreTokens()) ...{
            list.add(stk.nextToken());
        }
        String[] str = (String[]) list.toArray(new String[list.size()]);
        int a = Integer.parseInt(str[4]);
        int b = Integer.parseInt(str[5]);
        int port = a * 256 + b;
        // System.out.println("debug: port == " + port);
        return port;
    }
}
  
本文来自CSDN博客,转载请标明出处:http://blog.csdn.net/starshus/archive/2007/01/01/1471724.aspx

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-228660-1-1.html 上篇帖子: ftp 553:could not create file 下篇帖子: 使用FTP上传文件出现乱码解决方案
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表