zxg588 发表于 2015-5-27 11:27:27

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]
查看完整版本: Ftp 类