`

FTP 协议(rfc939) 简单的实验(in Java)

    博客分类:
  • Java
阅读更多

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

分享到:
评论

相关推荐

    FTP协议RFC文档

    根据RFC文档的描述,FTP的协议设计应该简单且易于实现,同时满足不同类型用户的需求,包括大型主机、小型主机、个人工作站和远程访问控制器(TACs)。FTP协议假设用户已经具备了传输控制协议(TCP)和Telnet协议的...

    Ftp协议:RFC959和HTTP协议:RFC2616

    RFC959是FTP协议的官方标准文档,它定义了FTP的命令和响应格式、连接管理、数据传输机制以及用户认证方式等。FTP支持两种工作模式:主动模式和被动模式。主动模式下,客户端首先建立控制连接,然后服务器主动建立...

    ftp-rfc959.rar_FTP RFC java_ftp_ftp java_ftp java_java ftp

    RFC 959是FTP协议的官方规范,详细定义了FTP的命令、响应码以及交互过程。在Java中实现FTP功能,我们可以利用Java的`java.net`和`java.io`包中的类来构建客户端和服务器端的通信。 Java FTP库通常提供了许多方便的...

    FTP协议RFC(中文版)及相关RFC文档

    都是以前收集的FTP协议RFC精华,还是中文的,现在网上很难下到了 RFC1123 - 互联网主机必要条件——应用程序和支持.pdf RFC1579 - 防火墙-友好FTP.pdf RFC1635 - 怎样使用匿名FTP.pdf RFC2151 - 关于Internet和...

    FTP - RFC959 中文版

    RFC959是FTP协议的官方规范文档,它定义了FTP协议的细节和交互过程。这篇博文提供了RFC959的中文翻译版本,对于理解FTP的工作原理和协议细节非常有帮助。 FTP协议基于TCP/IP协议栈,确保数据的可靠传输。它分为两个...

    rfc959FTP传输协议

    rfc959FTP传输协议2

    FTP-RFC959

    ### FTP-RFC959:理解文件传输协议的基础 FTP(File Transfer Protocol)是一种用于在网络上进行文件传输的标准网络协议,其定义在RFC959文档中。FTP的主要功能是在两个主机之间传输文件,允许用户从远程服务器下载...

    配套资料-FTP协议的RFC-rfc0959.txt

    ### 配套资料-FTP协议的RFC-rfc0959.txt:深入解析 #### 一、引言与目标 文件传输协议(File Transfer Protocol,简称FTP)旨在实现计算机程序和数据文件在不同主机之间的共享,促进远程计算机的间接使用,通过...

    RFC959 FTP协议官方标准文档 中文版+英文版 文件传输协议

    文件传输协议(英文:File Transfer Protocol,简称为FTP)是用于在网络上进行文件传输的一套标准协议。它属于网络协议组的应用...FTP协议的官方标准文档是RFC959,这里有中文版和英文版两种可供下载,文档格式是PDF。

    rfc959-ftp.rar_RFC959_c ftp_ftp_ftp rfc959_ftp协议

    RFC959 -FTP协议官方规范文档,写FTP应用程序必读的参考资料。(英文原版)

    常见网络协议RFC文档

    8. SMTP(简单邮件传输协议):用于发送电子邮件,而POP3和IMAP协议则用于接收邮件。 9. FTP(文件传输协议):FTP用于在互联网上传输文件,有匿名FTP和认证FTP两种方式。 10. ICMP(因特网控制消息协议):用于...

    FTP协议(RFC959)(中文版).pdf

    FTP协议(文件传输协议)是一种用于在计算机网络上传递文件的标准协议,它在RFC959标准文档中被正式定义。FTP的目标在于提高文件的共享性,允许用户间接地通过程序使用远程计算机,同时确保用户在不同主机系统间存储...

    java连接RFC综合例子,java调用sap例子,泛微E8,E9调用SAP RFC例子

    Java连接RFC(Remote Function Call)是一种技术,允许Java应用程序与SAP系统进行通信,执行SAP的业务逻辑。本文将详细解析标题和描述中提到的知识点,并提供相关的编程实例。 首先,我们需要理解RFC是什么。RFC是...

    java调用sap rfc说明

    以下是一个简单的Java RFC调用示例: ```java import com.sap.conn.jco.*; import com.sap.conn.jco.ext.Environment; public class SapRfcCallExample { public static void main(String[] args) { // 初始化...

    rfc959.rar_RFC959_ftp_ftp rfc_ftp rfc959_rfc ftp

    rfc ftp的完整协议, 开发ftp的必读文档

    FTP 协议的实现

    【设计题目】:FTP 协议的实现 【设计目的】: 1) 加深对 TCP/IP 协议的理解。 2) 了解 FTP 协议的工作原理。 3) 掌握用 MFC 编写 FTP 协议的实现程序(也可自选工具)。 【设计任务】: 在 Visual C++6. 0 的...

    RFC中文文档-txt

    RFC1445 简单网络管理协议(SNMPv2)版本 2的管理模式 RFC1454 下一代IP提议的比较 RFC1461 通过X.25多协议互连SNMP管理系统库(MIB)扩展 RFC1469 通过令牌-环局域网的IP多点传送 RFC1483 通过ATM适应层5的多协议封装 ...

    RDP协议RFC英文文档

    ### RDP协议RFC更新知识点详解 #### 一、引言 《RDP协议RFC英文文档》是一篇关于可靠数据传输协议(Reliable Data Protocol, RDP)的重要文档,该文档提出了对RDP版本1的若干更新建议。这些更新是基于在1986年和...

    http协议RFC中文版

    RFC文档是互联网标准过程的核心,它们详细描述了各种网络协议、程序和实践。 **RFC1945 - HTTP/1.0** RFC1945是HTTP/1.0版本的官方定义,发布于1996年。这个文档首次明确了HTTP的基本概念,包括请求方法(GET、...

    RFC821-简单邮件传输协议(SMTP)中文版

    ### 知识点详解:简单邮件传输协议(SMTP) #### 一、SMTP协议概述 SMTP,即Simple Mail Transfer Protocol,简单邮件传输协议,是互联网上用于发送电子邮件的标准协议。它定义了邮件服务器如何将邮件从一台计算机...

Global site tag (gtag.js) - Google Analytics