Java代码:
FTPClient.java
packageorg;

importjava.io.BufferedInputStream;
importjava.io.ByteArrayOutputStream;
importjava.io.IOException;
importjava.io.InputStream;
importjava.io.InputStreamReader;
importjava.io.OutputStreamWriter;
importjava.io.Reader;
importjava.io.Writer;
importjava.net.Socket;
importjava.util.ArrayList;
importjava.util.List;
importjava.util.StringTokenizer;


publicclassFtpClient...{

publicstaticfinalintDEFAULT_PORT=1968;


privatestaticintprint(Readerin)throwsIOException...{
intc;
intprev=0,current=0;
intresult=0;
intcount=0,k1=0,k2=0,k3=0;

while(prev!=' '&¤t!=' ')...{
prev=current;
c=in.read();
current=c;

if(count<3)...{

switch(count)...{
case0:
k1=current-'0';
break;
case1:
k2=current-'0';
break;
case2:
k3=current-'0';
break;
}
}
count++;
System.out.write(current);
}
result=k1*100+k2*10+k3;
returnresult;
}


privatestaticvoidprintData(Readerin)throwsIOException...{
intc=0;


while((c=in.read())!=-1)...{
System.out.print((char)c);
}
System.out.println();
}


privatestaticvoidinputCommand(Writerout,Stringcommand)throwsIOException...{
out.write(command);
out.write(" /r/n");
out.flush();
}


publicstaticvoidmain(String[]args)...{
Stringhostname="192.168.1.101";

SocketcommandConn=null;

SocketdataConn=null;


try...{

commandConn=newSocket(hostname,DEFAULT_PORT);

Writerout=newOutputStreamWriter(commandConn.getOutputStream(),
"8859_1");

InputStreamraw=commandConn.getInputStream();
BufferedInputStreambuffer=newBufferedInputStream(raw);
InputStreamReadercommandIn=newInputStreamReader(buffer,
"8859_1");

System.out.println("loginin");
inti=print(commandIn);//220

inputCommand(out,"USERwinters");
System.out.println("USERwinters");
i=print(commandIn);//331

inputCommand(out,"PASS123456");
System.out.println("PASS123456");
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,"TYPEA");
System.out.println("TYPEA");
i=print(commandIn);//200

inputCommand(out,"PASV");
System.out.println("PASV");

intport=getPortNumber(commandIn);
dataConn=newSocket(hostname,port);
BufferedInputStreamdataBuffer=newBufferedInputStream(dataConn
.getInputStream());
InputStreamReaderdataIn=newInputStreamReader(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=newSocket(hostname,port);
dataBuffer=newBufferedInputStream(dataConn.getInputStream());
dataIn=newInputStreamReader(dataBuffer,"8859_1");

System.out.println("Connected"+hostname+"on"+port);


/***//**
*RETR
*/

inputCommand(out,"RETR1.txt");
System.out.println("RETR1.txt");

System.out.print("commandIn:");
i=print(commandIn);//150

System.out.print("dataIn:");
printData(dataIn);//abc

i=print(commandIn);//226


}catch(IOExceptione)...{
System.err.println(e);

}finally...{

try...{
if(commandConn!=null)
commandConn.close();
if(dataConn!=null)
dataConn.close();

}catch(IOExceptione)...{
System.err.println(e);
}
}

}


privatestaticintgetPortNumber(InputStreamReaderin)throwsIOException...{
intc;
intprev=0,current=0;
booleanstart=false;
ByteArrayOutputStreamout=newByteArrayOutputStream();

while(prev!=' '&¤t!=' ')...{
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);
}

StringipWithPort=out.toString();
StringTokenizerstk=newStringTokenizer(ipWithPort,",");
Listlist=newArrayList();

while(stk.hasMoreTokens())...{
list.add(stk.nextToken());
}
String[]str=(String[])list.toArray(newString[list.size()]);
inta=Integer.parseInt(str[4]);
intb=Integer.parseInt(str[5]);
intport=a*256+b;
//System.out.println("debug:port=="+port);
returnport;
}
}
FTPClient.java



































































































































































































































