Ftp 类
usingSystem;usingSystem.Net;
usingSystem.IO;
usingSystem.Text;
usingSystem.Net.Sockets;
usingSystem.Diagnostics;
usingSystem.Runtime.Remoting;
usingSystem.Runtime.Remoting.Messaging;
/*
* FTP Client library inC#
* Author: JaimonMathew
*mailto:jaimonmathew@rediffmail.com
*http://www.csharphelp.com/archives/archive9.html
*
* Addapted for use by Dan Glass07/03/03
*
* modify by twh07/11/21
*/
namespacewhlib.net
{
publicclassFtpClient
{
publicclassFtpException:Exception
{
publicFtpException(stringmessage):base(message){}
publicFtpException(stringmessage,ExceptioninnerException):base(message,innerException){}
}
privatestaticintBUFFER_SIZE=512;
privatestaticEncodingASCII=Encoding.ASCII;
privateboolverboseDebugging=false;
// defaults
privatestringserver="localhost";
privatestringremotePath=".";
privatestringusername="anonymous";
privatestringpassword="anonymous@anonymous.net";
privatestringmessage=null;
privatestringresult=null;
privateintport=21;
privateintbytes=0;
privateintresultCode=0;
privateboolloggedin=false;
privateboolbinMode=false;
privateByte[]buffer=newByte;
privateSocketclientSocket=null;
privateinttimeoutSeconds=10;
///
/// Defaultcontructor
///
publicFtpClient()
{
}
///
///
///
///
///
///
publicFtpClient(stringserver,stringusername,stringpassword)
{
this.server=server;
this.username=username;
this.password=password;
}
///
///
///
///
///
///
///
///
publicFtpClient(stringserver,stringusername,stringpassword,inttimeoutSeconds,intport)
{
this.server=server;
this.username=username;
this.password=password;
this.timeoutSeconds=timeoutSeconds;
this.port=port;
}
///
/// Display allcommunications to the debug log
///
publicboolVerboseDebugging
{
get
{
returnthis.verboseDebugging;
}
set
{
this.verboseDebugging=value;
}
}
///
/// Remote server port. Typically TCP21
///
publicintPort
{
get
{
returnthis.port;
}
set
{
this.port=value;
}
}
///
/// Timeout waiting for aresponse from server, in seconds.
///
publicintTimeout
{
get
{
returnthis.timeoutSeconds;
}
set
{
this.timeoutSeconds=value;
}
}
///
/// Gets and Sets the nameof the FTP server.
///
///
publicstringServer
{
get
{
returnthis.server;
}
set
{
this.server=value;
}
}
///
/// Gets and Sets the portnumber.
///
///
publicintRemotePort
{
get
{
returnthis.port;
}
set
{
this.port=value;
}
}
///
/// GetS and Sets the remotedirectory.
///
publicstringRemotePath
{
get
{
returnthis.remotePath;
}
set
{
this.remotePath=value;
}
}
///
/// Gets and Sets theusername.
///
publicstringUsername
{
get
{
returnthis.username;
}
set
{
this.username=value;
}
}
///
/// Gets and Set thepassword.
///
publicstringPassword
{
get
{
returnthis.password;
}
set
{
this.password=value;
}
}
///
/// If the value of mode is true, setbinary mode for downloads, else, Ascii mode.
///
publicboolBinaryMode
{
get
{
returnthis.binMode;
}
set
{
if(this.binMode==value)return;
if(value)
sendCommand("TYPE I");
else
sendCommand("TYPE A");
if(this.resultCode!=200)thrownewFtpException(result.Substring(4));
}
}
///
/// Login to the remoteserver.
///
publicvoidLogin()
{
if(this.loggedin)this.Close();
Debug.WriteLine("Opening connection to "+this.server,"FtpClient");
IPAddressaddr=null;
IPEndPointep=null;
try
{
this.clientSocket=newSocket(AddressFamily.InterNetwork,SocketType.Stream,ProtocolType.Tcp);
addr=Dns.Resolve(this.server).AddressList;
ep=newIPEndPoint(addr,this.port);
this.clientSocket.Connect(ep);
}
catch(Exceptionex)
{
// doubtfull
if(this.clientSocket!=null&&this.clientSocket.Connected)this.clientSocket.Close();
thrownewFtpException("Couldn't connect toremote server",ex);
}
this.readResponse();
if(this.resultCode!=220)
{
this.Close();
thrownewFtpException(this.result.Substring(4));
}
this.sendCommand("USER "+username);
if(!(this.resultCode==331||this.resultCode==230))
{
this.cleanup();
thrownewFtpException(this.result.Substring(4));
}
if(this.resultCode!=230)
{
this.sendCommand("PASS "+password);
if(!(this.resultCode==230||this.resultCode==202))
{
this.cleanup();
thrownewFtpException(this.result.Substring(4));
}
}
this.loggedin=true;
Debug.WriteLine("Connected to "+this.server,"FtpClient");
this.ChangeDir(this.remotePath);
}
///
/// Close the FTPconnection.
///
publicvoidClose()
{
Debug.WriteLine("Closing connection to "+this.server,"FtpClient");
if(this.clientSocket!=null)
{
this.sendCommand("QUIT");
}
this.cleanup();
}
///
/// Return a string arraycontaining the remote directory's file list.
///
///
publicstring[]GetFileList()
{
returnthis.GetFileList("*.*");
}
///
/// Return a string arraycontaining the remote directory's file list.
///
///
///
publicstring[]GetFileList(stringmask)
{
if(!this.loggedin)this.Login();
SocketcSocket=createDataSocket();
this.sendCommand("NLST "+mask);
if(!(this.resultCode==150||this.resultCode==125))thrownewFtpException(this.result.Substring(4));
this.message="";
DateTimetimeout=DateTime.Now.AddSeconds(this.timeoutSeconds);
while(timeout>DateTime.Now)
{
intbytes=cSocket.Receive(buffer,buffer.Length,0);
this.message+=ASCII.GetString(buffer,0,bytes);
if(bytes
页:
[1]