首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > 编程 >

FTP 协议(rfc939) 容易的实验(in Java)

2012-12-20 
FTP 协议(rfc939) 简单的实验(in Java)Java代码:FTPClient.javapackage orgimport java.io.BufferedInput

FTP 协议(rfc939) 简单的实验(in 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

热点排行