`
baiguomeng
  • 浏览: 957527 次
文章分类
社区版块
存档分类
最新评论

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

 
阅读更多
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!=' '&&current!=' ')...{
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!=' '&&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);
}


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;
}

}


分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics